Я читал этот вопрос MySQL - почему бы не индексировать каждое поле? и решил провести несколько тестов.
Наличие двух эквивалентных таблиц (a и b), в каждой из которых по 5.000.000 строк и 3 столбца (int, int, varchar), я проиндексировал все столбцы в таблице b и просто проиндексировал один столбец (первичный ключ) в таблице a.
Результаты были следующими:
Изменить: время такое же, как показано ниже для строк, измененных / неизмененных.
mysql> update a set c = '1000000' where c = '1000000';
Query OK, 0 rows affected (2.13 sec)
Rows matched: 1 Changed: 0 Warnings: 0
mysql> update b set c = '1000000' where c = '1000000';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 0
Теперь это полностью противоположно тому, что я ожидал после прочтения ответов на вопрос.
Есть ли какой-либо «эталонный» недостаток, заключающийся в отсутствии индексации каждого столбца таблицы?
Правка: проблема заключалась в том, что каждый кортеж в таблице имел уникальное значение, и обновление одной индексированной и уникальной строки былодостаточно быстро, чтобы получить 0,00 балла.Однако когда я обновлял подмножества строк, такие как указанные Flimzy и Searlea, обновление неиндексированных столбцов происходило быстрее, чем обновление индексированных столбцов, как и должно быть.
Результаты, если вы хотите их увидеть:
mysql> update a set b = 98;
Query OK, 5000002 rows affected (10.85 sec)
Rows matched: 5000002 Changed: 5000002 Warnings: 0
mysql> update b set b = 98;
Query OK, 4988890 rows affected (1 min 32.69 sec)
Rows matched: 5000001 Changed: 4988890 Warnings: 0