У меня есть 2 вопроса.Оптимизация запросов
Первое:
SELECT * FROM `table` WHERE col='xyz' LIMIT 100
//Time Taken: 0.0047s
Второе:
SELECT * FROM `table` WHERE col='xyz' ORDER BY Id DESC LIMIT 100
//Time Taken: 1.8208s
Второй занимает гораздо больше времени. Я знаю, почему это так, потому что сначала я должен выбрать всю таблицу, а затем выполнить упорядочение, тогда как первый запрос возвращает только первые 100 строк.
Есть ли способ ORDER BY другим способом, например, выбрать последние 100 строк и затем выполнить заказ? Или я делаю запрос неправильно, и его можно сделать быстрее?
Обратите внимание, что идентификатор является автоинкрементным, поэтому при выборе последних строк по-прежнему будут возвращены правильные данные при его заказе.
CREATE TABLE `table`(
`Id` BIGINT NOT NULL AUTO_INCREMENT,
`dateReg` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`Id`)
) ENGINE=MyISAM
Было бы справедливо предположить, учитывая вы используете автоинкрементного на ваш идентификатор, вы можете просто выбрать последний 100 строк? – Dave
^да, но как выбрать последние 100 строк –
Отправьте результат EXPLAIN (http://dev.mysql.com/doc/refman/5.0/en/explain.html) для обоих запросов, что поможет. Кроме того, что такое «намного больше времени»? Сколько времени занимает каждый запрос? –