Mysql равен или больше (меньше) разница в производительности - PullRequest
4 голосов
/ 21 января 2011

Есть ли разница в производительности в Mysql для большого набора данных при использовании равно или больше, чем в предложении where.

Я могу выполнить следующие два запроса для одной и той же цели.

select * from My_Table where MY_Field > 100; // 100 - старое значение

или

select * from MY_Table where MY_Field = 101; 

Это известное значение My_Field, если больше 100 будет 101.

Есть предложения?

Ответы [ 4 ]

3 голосов
/ 21 января 2011

Если MY_Field покрыт индексом, то разница в поиске значений в индексе невелика. Это верно до тех пор, пока набор результатов не составит около 30% от общего числа строк в таблице.

Но для каждой записи, найденной в индексе, mysql необходимо выполнить поиск по файлу данных, чтобы найти соответствующую строку (поскольку у вас есть SELECT *).

Итак - в вашем случае, если вы знаете конкретное значение поля, лучше использовать =.

0 голосов
/ 14 августа 2017

Лучше использовать MY_Field = 101, поскольку mysql будет выполнять ref тип доступа, что означает, что индекс будет сравниваться с эталонным значением, что быстрее, чем range в случае MY_Field > 100, что означает, что mysql будет сравнивать значения диапазона в индексе.

Вы можете проверить это в type поле в explain для вашего запроса.

0 голосов
/ 21 января 2011

Вы можете оптимизировать запрос, если знаете, что будет получен только один результат, используйте LIMIT 1

select * from MY_Table where MY_Field = 101 LIMIT 1;

, что лучше, так как при выполнении, если он находит результат совпадения с одной строкой, mysql остановит выполнение

0 голосов
/ 21 января 2011

Зависит от типа индекса в этом конкретном столбце: BTREE подходит для поиска в диапазонах, HASH - для поиска уравнения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...