Fast MAX, GROUP BY на конкатенацию муллиповых столбцов - PullRequest
1 голос
/ 01 июля 2011

У меня есть таблица с 4 столбцами: имя, дата, версия и значение. На всех четырех есть составной индекс, в этом порядке. В нем 20 миллионов строк: 2000 имен, около 1000 дат на имя, около 10 версий на дату.

Я пытаюсь получить список, в котором для всех имен указана самая высокая дата, самая высокая версия на эту дату и соответствующее значение.

Когда я делаю

  SELECT name,
         MAX(date) 
    FROM table 
GROUP BY name

Я получаю хорошую производительность, а база данных использует составной индекс

Однако, когда я присоединяю таблицу к этому, чтобы получить MAX(version) для имени, запрос занимает годы. Должен быть способ получить результат примерно за ту же величину, что и оператор SELECT выше? Я легко могу сделать с помощью индекса.

1 Ответ

0 голосов
/ 01 июля 2011

Попробуйте: (я знаю, что для MySQL нужно несколько настроек синтаксиса ... спросите их, и я их найду)

INSERT INTO #TempTable
SELECT name, MAX(Date) as Date
FROM table
Group By name

select table.name, table.date, max(table.version) as version
from table
inner join #TempTable on table.name = #temptable.name and table.date = #temptable.date
group by table.name, table.date
...