mysql> select sum(bytes) as 'downlaod' from ip where inet_ntoa(dst_ip)='10.2.1.226' and inet_ntoa(src_ip)='10.2.3.2' and stime> unix_timestamp('2006-11-16 00:00:00') ; +----------+ | downlaod | +----------+ | 5350058 | +----------+ 1 row in set (3.14 sec) mysql> create index cool1 on ip (bytes,dst_ip,src_ip,stime);Query OK, 4751244 rows affected (43.81 sec) Records: 4751244 Duplicates: 0 Warnings: 0 mysql> select sum(bytes) as 'downlaod' from ip where inet_ntoa(dst_ip)='10.2.1.226' and inet_ntoa(src_ip)='10.2.3.2' and stime> unix_timestamp('2006-11-16 00:00:00') ; +----------+ | downlaod | +----------+ | 5350058 | +----------+ 1 row in set (11.41 sec) mysql> explain select sum(bytes) as 'downlaod' from ip where inet_ntoa(dst_ip)='10.2.1.226' and inet_ntoa(src_ip)='10.2.3.2' and stime> unix_timestamp('2006-11-16 00:00:00') ; +----+-------------+-------+-------+---------------+-------+---------+------+---------+--------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+-------+---------------+-------+---------+------+---------+--------------------------+ | 1 | SIMPLE | ip | index | NULL | cool1 | 20 | NULL | 4751244 | Using where; Using index | +----+-------------+-------+-------+---------------+-------+---------+------+---------+--------------------------+ 1 row in set (0.00 sec)
Для меня самым странным стало то, что добавление индекса увеличило время выполнения запроса в 3 раза. Я почему-то считал, что добавление индекса может сделать лучше (а может и не сделать), но не хуже ...
P.S. В базу во время теста ничего не писалось.
Update: переписал запрос и оно пошло.