У нас есть один из наших таблиц в нашей базе данных, которая начинает быть довольно большим: 10M строк 2,14 г для данных
3.55G для индексовUnneeded MySQL индексы
Я был очень удивлен, увидев, что индексы почти вдвое больше, чем сами данные:/
так я показал показатели:
show index from entries;
+---------+------------+----------------------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+---------+------------+----------------------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| entries | 0 | PRIMARY | 1 | id | A | 13538389 | NULL | NULL | | BTREE | |
| entries | 0 | index_entries_on_link_and_feed_id | 1 | link | A | 13538389 | NULL | NULL | YES | BTREE | |
| entries | 0 | index_entries_on_link_and_feed_id | 2 | feed_id | A | 13538389 | NULL | NULL | YES | BTREE | |
| entries | 0 | index_entries_on_unique_id_and_feed_id | 1 | unique_id | A | 13538389 | NULL | NULL | YES | BTREE | |
| entries | 0 | index_entries_on_unique_id_and_feed_id | 2 | feed_id | A | 13538389 | NULL | NULL | YES | BTREE | |
| entries | 1 | index_entries_on_feed_id | 1 | feed_id | A | 81556 | NULL | NULL | YES | BTREE | |
| entries | 1 | index_entries_on_time | 1 | time | A | 967027 | NULL | NULL | YES | BTREE | |
| entries | 1 | index_entries_on_created_at | 1 | created_at | A | 846149 | NULL | NULL | YES | BTREE | |
+---------+------------+----------------------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
8 rows in set (1.35 sec)
насколько я могу сказать, что наш код использует все индексы, все же некоторая информация может быть дублировано: я думаю, что индекс index_entries_on_feed_id
может быть дубликатом, так как и index_entries_on_link_and_feed_id
, и index_entries_on_unique_id_and_feed_id
его используют.
Я прав?
Я бы ожидал, что MySQL не будет * использовать эти другие индексы, потому что feed_id не является первым полем в последовательности. Вы не должны удивляться тому, что индексы иногда занимают больше места, чем данные. – Joe
интересный. Означает ли это, что если я изменю порядок в любом из index_entries_on_link_and_feed_id или index_entries_on_unique_id_and_feed_id, мне не нужен индекс index_entries_on_feed_id? –