Подсчет различных значений в большом наборе данных (40M строк): SELECT count (*) в качестве count, name FROM names GROUP BY name ORDER BY name; - PullRequest
0 голосов
/ 21 января 2010
CREATE TABLE `names` ( `name` varchar(20) );

Предположим, что таблица names содержит все 40 миллионов имен всех жителей Калифорнии (например).

SELECT count(*) as count, name FROM names GROUP BY name ORDER BY name;

Как мне оптимизировать этот запрос?

Ожидаемый результат:

count | name
 9999 | joe
 9995 | mike
 9990 | kate
 .... | ....
    2 | kal-el

Ответы [ 2 ]

1 голос
/ 21 января 2010

Вы должны создать индекс по столбцу имени вашей таблицы. Запрос настолько хорош, насколько это возможно.

0 голосов
/ 21 января 2010

Ну, с чего вы взяли, что он еще не оптимизирован? Это похоже на запрос, который хороший обработчик базы данных должен обрабатывать относительно легко, особенно если у вас есть соответствующий индекс в вашей таблице.

У вас действительно есть узкое место здесь, или вы беспокоитесь о том, что может произойти в будущем? Если это последнее, я предлагаю вам попробовать это с вашей RDBMS (путем создания фиктивных данных), и посмотреть, что произойдет.

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