Запрос для таблицы с большим размером столбцов - PullRequest
0 голосов
/ 27 марта 2012

У меня есть таблица, в которой есть несколько столбцов с большими текстовыми данными. Запрос по 10 строкам (в таблице всего 31 запись) занимает более 20 секунд. Если я удаляю поля большого размера, запрос выполняется быстро. Запрос по 1 строке (по идентификатору) всегда выполняется быстро.

Как сделать так, чтобы запрос для многих строк работал быстрее?

Запрос выглядит так

SELECT DISTINCT (a.id), a.field_1, a.field_2, a.field_3
    , a.field_4, a.field_5, a.filed_6, ...  
FROM table_a a, table_b b 
WHERE a.field_8 = 'o'  
ORDER BY a.field_2 DESC 
LIMIT 10;

Ответы [ 2 ]

1 голос
/ 27 марта 2012

@ a_horse уже намекает на возможную синтаксическую ошибку. Попробуйте:

SELECT DISTINCT <b>ON (a.id)  a.id,</b> a.field_1, a.field_2, a.field_3, ...
FROM   table_a a
-- JOIN table_b b ON ???
WHERE  a.field_8 = 'o'  
ORDER  BY a.id, a.field_2 DESC 
LIMIT  10;

Обратите внимание на выделение жирным шрифтом и прочтите предложение DISTINCT в руководстве .

Также может помочь индекс field_8.
многоколонный индекс на (field_8, id, field_2) может помочь еще больше, если вы можете сузить его до этого (и если это порядок сортировки, который вы хотите, в чем я сомневаюсь).

Если вы хотите, чтобы результат сначала был отсортирован по a.field_2 DESC: В PostgreSQL 9.1 , если id является первичным ключом :

SELECT a.id, a.field_1, a.field_2, a.field_3, ...
FROM   table_a a
-- JOIN table_b b ON ???
WHERE  a.field_8 = 'o'
GROUP  BY a.id   -- primary key takes care of all columns in table a
ORDER  BY a.field_2 DESC 
LIMIT  10;
0 голосов
/ 27 марта 2012

почему вы выбираете table_b? Вы не присоединяетесь к этим таблицам! сделай реальное соединение вот так

SELECT DISTINCT
    (a.id), a.field_1, a.field_2, a.field_3, a.field_4, a.field_5, a.filed_6 
FROM table_a a
INNER JOIN table_b b
    ON b.field_on_table_b = a.field_on_table_a
WHERE a.field_8 = 'o'
ORDER BY a.field_2 DESC LIMIT 10

тогда убедитесь, что field_8 (в операторе where) определено с ключом!

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