antenne
Новичок
Using filesort
mysql> explain select * from search_index WHERE uid IN(119103, 144163, 71119, 88182, 76123, 94095, 135607, 113842, 13963, 2944) order by position;
+----+-------------+--------------+-------+-----------------+------+---------+------+------+-----------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------------+-------+-----------------+------+---------+------+------+-----------------------------+
| 1 | SIMPLE | search_index | range | uid,chunk_fetch | uid | 4 | NULL | 10 | Using where; Using filesort |
+----+-------------+--------------+-------+-----------------+------+---------+------+------+-----------------------------+
mysql> show create table search_index\G
*************************** 1. row ***************************
Table: search_index
Create Table: CREATE TABLE `search_index` (
`position` mediumint(8) unsigned NOT NULL default '0',
`uid` int(10) unsigned NOT NULL,
`sex` enum('M','F') NOT NULL,
`age` tinyint(3) unsigned NOT NULL,
`countryCode` tinyint(3) unsigned NOT NULL,
`cityCode` smallint(5) unsigned default NULL,
`havePhoto` tinyint(3) unsigned NOT NULL,
UNIQUE KEY `uid` (`uid`),
UNIQUE KEY `pos` (`position`),
KEY `chunk_fetch` (`uid`,`position`),
KEY `chunk_fetch_r` (`position`,`uid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
нужно избавиться от filesort... диск нагружен, работает медленно
насколько я понимаю, мускуль выбирает индекс uid, потому как больше ему выбрать нечего,
затем, т.к. в индексе отсутствует Position - сортирует через файл
Есть предложения?
mysql> explain select * from search_index WHERE uid IN(119103, 144163, 71119, 88182, 76123, 94095, 135607, 113842, 13963, 2944) order by position;
+----+-------------+--------------+-------+-----------------+------+---------+------+------+-----------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------------+-------+-----------------+------+---------+------+------+-----------------------------+
| 1 | SIMPLE | search_index | range | uid,chunk_fetch | uid | 4 | NULL | 10 | Using where; Using filesort |
+----+-------------+--------------+-------+-----------------+------+---------+------+------+-----------------------------+
mysql> show create table search_index\G
*************************** 1. row ***************************
Table: search_index
Create Table: CREATE TABLE `search_index` (
`position` mediumint(8) unsigned NOT NULL default '0',
`uid` int(10) unsigned NOT NULL,
`sex` enum('M','F') NOT NULL,
`age` tinyint(3) unsigned NOT NULL,
`countryCode` tinyint(3) unsigned NOT NULL,
`cityCode` smallint(5) unsigned default NULL,
`havePhoto` tinyint(3) unsigned NOT NULL,
UNIQUE KEY `uid` (`uid`),
UNIQUE KEY `pos` (`position`),
KEY `chunk_fetch` (`uid`,`position`),
KEY `chunk_fetch_r` (`position`,`uid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
нужно избавиться от filesort... диск нагружен, работает медленно
насколько я понимаю, мускуль выбирает индекс uid, потому как больше ему выбрать нечего,
затем, т.к. в индексе отсутствует Position - сортирует через файл
Есть предложения?