-
Incident report
-
Resolution: Fixed
-
Major
-
2.1.0
-
rev. 28751
mysql> select count from hosts;
----------
count |
----------
18294 |
----------
1 row in set (0.00 sec)
mysql> select count from groups;
----------
count |
----------
26 |
----------
1 row in set (0.00 sec)
mysql> select count from hosts_groups;
----------
count |
----------
54822 |
----------
1 row in set (0.01 sec)
mysql> explain SELECT DISTINCT h.hostid,h.name,hg.groupid FROM hosts h,hosts_groups hg USE INDEX ( hosts_groups_2) WHERE (hg.groupid IN ('148','25','24','21','147','11','9','26','29','28','14','19','12','18','13','10','16','15','20','17','22','4')) AND hg.hostid=h.hostid AND h.status=0 AND h.hostid BETWEEN 000000000000000 AND 099999999999999;
--------------------------------------------------------------------------------------------------------+
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
--------------------------------------------------------------------------------------------------------+
1 | SIMPLE | hg | ALL | hosts_groups_2 | NULL | NULL | NULL | 55669 | Using where; Using temporary |
1 | SIMPLE | h | eq_ref | PRIMARY,hosts_2 | PRIMARY | 8 | zabbix.hg.hostid | 1 | Using where |
--------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
This query executes ~0.5seconds. This query does not use indexes for "hosts_groups" table.
mysql> explain SELECT DISTINCT h.hostid,h.name,hg.groupid FROM hosts h,hosts_groups hg WHERE (hg.groupid IN ('148','25','24','21','147','11','9','26','29','28','14','19','12','18','13','10','16','15','20','17','22','4')) AND hg.hostid=h.hostid AND h.status=0 AND h.hostid BETWEEN 000000000000000 AND 099999999999999;
--------------------------------------------------------------------------------------------------------------------------------+
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
--------------------------------------------------------------------------------------------------------------------------------+
1 | SIMPLE | h | ref | PRIMARY,hosts_2 | hosts_2 | 4 | const | 8979 | Using where; Using temporary |
1 | SIMPLE | hg | range | hosts_groups_1,hosts_groups_2 | hosts_groups_1 | 16 | NULL | 27834 | Using where; Using index; Using join buffer |
--------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
The new query executes ~142seconds.
Mysql query optimizer uses "hosts_groups_1". But query selects from "hosts" table almost all of data. So this query executes much longer.