An index on (a) is redundant when an index on (a, b) exists, because the composite serves every query the single-column one could — and both are being maintained on every write.
SELECT * FROM sys.schema_redundant_indexesG
-- table_name: orders
-- redundant_index_name: idx_status
-- redundant_index_columns: status
-- dominant_index_name: idx_status_customer
-- dominant_index_columns: status,customer_id
-- sql_drop_index: ALTER TABLE `shop`.`orders` DROP INDEX `idx_status`
The view generates the drop statement, which is convenient and worth reading rather than executing blindly — a redundant index can still be the better choice when it is dramatically narrower and the table is write-heavy. Reversing the column order produces a genuinely different index, so (a, b) and (b, a) are not redundant with each other. Running this on any mature schema usually finds three or four.