У меня 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