Долгий каунт селект при условии - 2 секунды. База 800 тыс записей, 500 мб

Dobr

Новичок
Долгий каунт селект при условии - 2 секунды. База 800 тыс записей, 500 мб

Суть вот в чем. В база около 500 мб, в базе около 800 тыс записей.
Когда делаешь SELECT count(id) from table where option='5'; - выполняется 2 сек. Время самого мускула.
Без всяких условий 0 сек.
Индексы для id есть, для option тоже.

Каунт возвращает около полловины значений - примерно 350 тыс.
Если опшин ставить другой и записей будет меньше, то и время меньше.

Вопрос почему так долго ? И что делать чтобы ускорить ?
PS. Другие селекты (не каунтовые т.е. select * from table where option1='x' and option2='y' and option3!='z';), при разных условиях и индексах выдают данные за 0-0.1 сек
 

Dobr

Новичок
для него тоже есть
что с ним, что без индекса - разницы в выполнении нету
 

Dobr

Новичок
гм :) читаем обнеовленный верхний пост - около 350 тыс.
 

Dobr

Новичок
Хм, проблема немного решилась.
Если сделать
SELECT count(*) from table where option='5';
То время выполнения будет уже 0.2 сек.
Что несравненно лучше.
Но вопрос еще стоит.
Еще улучшить можно ?
PS. Возвращает около 350 тыс. , так что считать ему много.

-~{}~ 01.11.06 16:46:

Автор оригинала: Андрейка
для него тоже есть
по началу все так говорят
ЗЫ. а еще есть explain
mysql> EXPLAIN SELECT count(*) FROM table WHERE option='6';
+-------+------+---------------+--------+---------+-------+--------+-------------------------+
| table | type | possible_keys | key | key_len | ref | rows | Extra |
+-------+------+---------------+--------+---------+-------+--------+-------------------------+
| table | ref | option | option | 4 | const | 337615 | where used; Using index |
+-------+------+---------------+--------+---------+-------+--------+-------------------------+
 

chira

Новичок
Dobr
как часто обновляются данные в таблице table?
создай суммарную таблицу и читай данные из неё
суммарные данные обновляй с изменением основных данных ...
 

Dobr

Новичок
Данные обновляются примерно каждые 5-10 минут.
И потом про какую суммарную таблицу речь ?
 

chira

Новичок
Dobr

в суммарной таблице будет 2 поля
option PRIMARY KEY, cnt
запольнить её можно c помощью SQL:
Код:
REPLACE INTO sum_table
SELECT option, count(*) 
FROM table
GROUP BY option
в зависимости от алгоритма заполнения основной таблицы, можно придумать оптимальный алгоритм для обновления суммарной таблицы
 
Сверху