2016-04-17 3 views
0

У меня есть простой запрос, как:Faster ORDER BY LIMIT OFFSET

SELECT id, champs1, champs2, champs3, count(*) OVER() AS full_count 
FROM my_table 
ORDER BY champs1 ASC 
LIMIT 10 OFFSET 0 

LIMIT и OFFSET используются для постраничной мои результаты.

Но запрос очень медленный: ~ 20 секунд. Моя таблица «my_table» имеет ~ 8 миллионов строк.

Я разместил указатель на столбце «champs1», но он все еще очень медленный.

Как это сделать быстрее? Спасибо за помощь

ответ

2

Как долго выполняется запрос без использования full_count? Это может быть частью проблемы (я не уверен).

Вы можете попробовать это:

SELECT id, champs1, champs2, champs3, fc.full_count 
FROM my_table CROSS JOIN 
    (SELECT count(*) as full_count FROM my_table) fc 
ORDER BY champs1 ASC 
LIMIT 10 OFFSET 0; 

Тогда, убедитесь, что у вас есть индекс по my_table(champs1).

+0

Awesome Gordon, большое спасибо за ваш метод! :) – Macbernie

Смежные вопросы