Nous avons une de nos tables dans notre base de données qui commence à être assez grand: 10M lignes pour les données
2,14 g pour les indices 3,55 gInutiles indices MySQL
J'ai été très surpris de voir que les indices sont presque deux fois plus grand que les données lui-même:/
Alors j'ai montré les indices:
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)
Pour autant que je peux dire à notre code utilise tous les indices, encore quelques informations pourrait être dupliqué: Je pense que l'index index_entries_on_feed_id
pourrait être un doublon puisque les deux index_entries_on_link_and_feed_id
et l'utilisent.
Ai-je raison?
Je m'attendrais à ce que MySQL n'utilise * pas * ces autres index car feed_id n'est pas le premier champ en séquence. Vous ne devriez pas être surpris que les index prennent parfois plus d'espace que les données. – Joe
intéressant. Cela signifie-t-il que si je modifie l'ordre dans index_entries_on_link_and_feed_id ou index_entries_on_unique_id_and_feed_id, je n'ai pas besoin de l'index index_entries_on_feed_id? –