young
Новичок
group by varchar field: можно ли ускорить?
Есть таблица, фактически - лог веб сервера, интересующие нас поля
`date` date NOT NULL default '0000-00-00',
`referer_url` varchar(255) collate utf8_unicode_ci NOT NULL default '',
Типичный запрос - топ 20 по реферерам за период
mysql> explain SELECT SQL_NO_CACHE COUNT( id ) AS amount, referer_url FROM referer_log WHERE date >= '2007-11-01' AND date < '2007-12-01' GROUP BY referer_url ORDER BY amount DESC LIMIT 20 ;
+----+-------------+-------------+-------+---------------+------+---------+------+--------+----------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------------+-------+---------------+------+---------+------+--------+----------------------------------------------+
| 1 | SIMPLE | referer_log | range | date | date | 3 | NULL | 121789 | Using where; Using temporary; Using filesort |
+----+-------------+-------------+-------+---------------+------+---------+------+--------+----------------------------------------------+
1 row in set (0.00 sec)
то что отрабатывает индекс по дате - это замечательно, а вот ускорить группировку никак не получается
это вообще реально?
ну и почти сразу приходит идея вынести referer_url в справочную таблицу, со всеми уникальными значениями, и группировать по ID-ключу, но опять же, не уверен что это поможет
Есть таблица, фактически - лог веб сервера, интересующие нас поля
`date` date NOT NULL default '0000-00-00',
`referer_url` varchar(255) collate utf8_unicode_ci NOT NULL default '',
Типичный запрос - топ 20 по реферерам за период
mysql> explain SELECT SQL_NO_CACHE COUNT( id ) AS amount, referer_url FROM referer_log WHERE date >= '2007-11-01' AND date < '2007-12-01' GROUP BY referer_url ORDER BY amount DESC LIMIT 20 ;
+----+-------------+-------------+-------+---------------+------+---------+------+--------+----------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------------+-------+---------------+------+---------+------+--------+----------------------------------------------+
| 1 | SIMPLE | referer_log | range | date | date | 3 | NULL | 121789 | Using where; Using temporary; Using filesort |
+----+-------------+-------------+-------+---------------+------+---------+------+--------+----------------------------------------------+
1 row in set (0.00 sec)
то что отрабатывает индекс по дате - это замечательно, а вот ускорить группировку никак не получается
это вообще реально?
ну и почти сразу приходит идея вынести referer_url в справочную таблицу, со всеми уникальными значениями, и группировать по ID-ключу, но опять же, не уверен что это поможет