berkut
Новичок
limit - тормоза, full table scan
Вообщем есть таблица с ~11000 записей, на диске занимает ~1Гб
И тут не понятная проблема с выборкой - LIMIT 1, 10 - летает,
LIMIT 100, 10 - подтормаживает, LIMIT 10000, 10 - жуть тормозит.
Сделал подобную тестовую таблицу:
Запрос:
Результаты на моей машине:
{VAR} = 1 - 0,2 сек.
{VAR} = 100 - 0,03 сек.
{VAR} = 1000 - 0,09 сек.
{VAR} = 10000 - ~23 сек.
Проблема в том, что для поиска 10000 строки
муська сканирует
всю таблицу, вместо того, что-бы использовать
индекс id.
unique key по id + use index не спасают.
Сделал такой костыль:
эти запросы выполняются мгновенно
ещё как вариант:
но это всё не красиво и не оптимально.
Как всё-таки заставить муську при select * ... limit использовать индекс
Вообщем есть таблица с ~11000 записей, на диске занимает ~1Гб
И тут не понятная проблема с выборкой - LIMIT 1, 10 - летает,
LIMIT 100, 10 - подтормаживает, LIMIT 10000, 10 - жуть тормозит.
Сделал подобную тестовую таблицу:
Код:
CREATE TABLE `test_count` (
`id` mediumint(9) unsigned NOT NULL auto_increment,
`field2` text NOT NULL,
`field3` text NOT NULL,
`field4` text NOT NULL,
`field5` longblob,
`field6` longblob,
`field7` longblob,
PRIMARY KEY (`id`)
) ENGINE=MyISAM
Код:
SELECT * FROM test_count LIMIT {VAR}, 10
{VAR} = 1 - 0,2 сек.
{VAR} = 100 - 0,03 сек.
{VAR} = 1000 - 0,09 сек.
{VAR} = 10000 - ~23 сек.
Проблема в том, что для поиска 10000 строки
муська сканирует
всю таблицу, вместо того, что-бы использовать
индекс id.
unique key по id + use index не спасают.
Сделал такой костыль:
Код:
SELECT id FROM test_count LIMIT 10000, 10;
+
SELECT * FROM test_count
WHERE id IN (RESULTS_FROM_PREVIOUS_QUERY);
ещё как вариант:
Код:
SELECT * FROM test_count, (SELECT id FROM test_count ORDER BY id LIMIT 10000, 10) t
WHERE test_count.id=t.id;
Как всё-таки заставить муську при select * ... limit использовать индекс