Dl
Новичок
Оптимизировать запрос для web_count
Добрый день!
Опишу суть проблемы:
В компании на сайте настроена статистика посещений web_count.
С недавнего времени количество записей в одной таблице (counts_table_session) перевалило за 900000 и один запрос стал сильно нагружать сервер. Время выполнения доходило до 67 секунд.
Запись из slow_qury.log:
# Query_time: 67 Lock_time: 0 Rows_sent: 1 Rows_examined: 911125
SELECT count(distinct(statid)) FROM counts_table_session;
Структура таблицы:
CREATE TABLE `counts_table_session` (
`id` int(10) NOT NULL auto_increment,
`statid` int(10) NOT NULL default '0',
`time` int(11) NOT NULL default '0',
`page` varchar(50) default NULL,
PRIMARY KEY (`id`),
KEY `statid` (`statid`),
KEY `time` (`time`),
KEY `page` (`page`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
Если выполнить этот запрос выполнить в командной строке MySQL на сервере:
mysql> select count(distinct(statid)) from counts_table_session;
+----------------------------+
| count(distinct(statid)) |
+----------------------------+
| 37704 |
+----------------------------+
1 row in set (1.31 sec)
Я попытался его немного оптимизировать, получилось:
mysql> select count(*) from (select distinct `statid` from `counts_table_session`) as `sessions`;
+-----------+
| count(*) |
+-----------+
| 37704 |
+-----------+
1 row in set (0.58 sec)
Изменил его и в скрипте, но в slow_qury.log он все равно пишется:
# Query_time: 11 Lock_time: 0 Rows_sent: 1 Rows_examined: 0
SELECT COUNT(*) FROM (SELECT DISTINCT `statid` FROM `counts_table_session`) AS `sessions`;
В my.ini
set-variable=long_query_time=1
PHP Version 5.1.6, Apache 2.0 Handler, MySQL 5.0.22.
Вопрос: можно ли запрос ещё оптимизировать или искать косяк в коде?
Добрый день!
Опишу суть проблемы:
В компании на сайте настроена статистика посещений web_count.
С недавнего времени количество записей в одной таблице (counts_table_session) перевалило за 900000 и один запрос стал сильно нагружать сервер. Время выполнения доходило до 67 секунд.
Запись из slow_qury.log:
# Query_time: 67 Lock_time: 0 Rows_sent: 1 Rows_examined: 911125
SELECT count(distinct(statid)) FROM counts_table_session;
Структура таблицы:
CREATE TABLE `counts_table_session` (
`id` int(10) NOT NULL auto_increment,
`statid` int(10) NOT NULL default '0',
`time` int(11) NOT NULL default '0',
`page` varchar(50) default NULL,
PRIMARY KEY (`id`),
KEY `statid` (`statid`),
KEY `time` (`time`),
KEY `page` (`page`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
Если выполнить этот запрос выполнить в командной строке MySQL на сервере:
mysql> select count(distinct(statid)) from counts_table_session;
+----------------------------+
| count(distinct(statid)) |
+----------------------------+
| 37704 |
+----------------------------+
1 row in set (1.31 sec)
Я попытался его немного оптимизировать, получилось:
mysql> select count(*) from (select distinct `statid` from `counts_table_session`) as `sessions`;
+-----------+
| count(*) |
+-----------+
| 37704 |
+-----------+
1 row in set (0.58 sec)
Изменил его и в скрипте, но в slow_qury.log он все равно пишется:
# Query_time: 11 Lock_time: 0 Rows_sent: 1 Rows_examined: 0
SELECT COUNT(*) FROM (SELECT DISTINCT `statid` FROM `counts_table_session`) AS `sessions`;
В my.ini
set-variable=long_query_time=1
PHP Version 5.1.6, Apache 2.0 Handler, MySQL 5.0.22.
Вопрос: можно ли запрос ещё оптимизировать или искать косяк в коде?