Плохая производительность MySQL для довольно простого выбора - PullRequest
0 голосов
/ 05 ноября 2011

У меня проблема с производительностью моих запросов MySQL. У меня очень большой стол

create table query(
    id  Integer,
    session Integer,
    time    Integer,
    name    Integer,
    region  Integer);

Объем данных - 2 ГБ. Я сделал индекс по «имени» - 7 ГБ.

Мои запросы выглядят так:

select count(id) from query where name=somevalue;

Я бы не стал добавлять какие-либо новые данные, и я использовал стандартный «my-огромный.cnf». Тем не менее, я трачу около 4-5 секунд на запрос, я собираюсь сделать около 9-10 * 45000 запросов. Какие параметры следует изменить, чтобы увеличить скорость, если на компьютере установлено 2 ГБ памяти.

Ответы [ 2 ]

2 голосов
/ 05 ноября 2011

Если вы никогда не изменяете данные, вам следует один раз выполнить запросы ко всем возможным именам (SELECT DISTINCT(name) FROM query), а затем сохранить значение COUNT() в кэше. Для этого вы можете создать таблицу cache с name и total в качестве столбцов и заполнить ее результатами запуска SELECT name, COUNT(*) AS total FROM query WHERE name = 'name' для каждого имени.

Тогда вы просто SELECT total FROM cache WHERE name = 'name', что будет очень быстро.

2 голосов
/ 05 ноября 2011

Счетчик (*) может работать незначительно быстрее.

select count(*) as rowcount from query where name=somevalue;

Также вы можете рассмотреть возможность кэширования счетчиков в отдельной таблице и запроса из нее.

...