Два запроса эквивалентны:
SELECT DISTINCT msgid
FROM Tbl_responses
WHERE username = 'zac1987' ;
и
SELECT msgid
FROM Tbl_responses
WHERE username = 'zac1987'
GROUP BY msgid ;
Я предлагаю вам составной индекс на (username, msgid)
.Это поможет любой версии запроса.
Но было бы лучше, если бы вы создали тестовую таблицу со строками 10 КБ (или даже 100 КБ или 1 МБ) и попробовали планы скорости и выполнения, сначала с простым индексом на(username)
и затем с составным индексом на (username, msgid)
.
Разница будет показана в столбце Extra
в плане выполнения, где для первого случая с простым индексом будет отображаться «Используя где, используя временный» , где во втором случае, с составным индексом это покажет «Использование где, используя индекс»
Как указал Тюдор, беспокоиться о скорости с 5000 записями - преждевременная оптимизация.Если у вас есть записи 500 КБ или вы видите снижение производительности, вам следует начать беспокоиться.
Примечание. Эти два запроса эквивалентны НЕ , поэтому вы не всегда можете удалитьПредложение DINSTINT, переместив поле в GROUP BY и ожидая таких же результатов:
SELECT DISTINCT msgid, response
FROM Tbl_responses
WHERE username = 'zac1987' ;
и
SELECT msgid, response
FROM Tbl_responses
WHERE username = 'zac1987'
GROUP BY msgid ;