テーブルは、約20Kの行があり、作成し、次のコード:テーブルがインデックスされていても、クエリが1000行をチェックしているのはなぜですか?
CREATE TABLE `inventory` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`TID` int(11) DEFAULT NULL,
`RID` int(11) DEFAULT NULL,
`CID` int(11) DEFAULT NULL,
`value` text COLLATE utf8_unicode_ci,
PRIMARY KEY (`ID`),
KEY `index_TID_CID_value` (`TID`,`CID`,`value`(25))
);
、これは、約13K説明クエリ
mysql> explain select rowID from inventory where TID=4 and CID=28 and value=3290843588097;
+----+-------------+------------+------+------------------------+-----------------------+---------+-------------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------+------+------------------------+-----------------------+---------+-------------+------+-------------+
| 1 | SIMPLE | inventory | ref | index_TID_CID_value | index_TID_CID_value | 10 | const,const | 9181 | Using where |
+----+-------------+------------+------+------------------------+-----------------------+---------+-------------+------+-------------+
1 row in set (0.00 sec)
TID = 4およびCID = 28の組み合わせの結果を有しています表の行。
私の質問は以下のとおりです。
理由を説明する結果が周り9K行が は、最終的な結果を得るために検討されることを私に言っていますか?
なぜカラム
ref
のみconst,const
3以降の列は、複数列インデックスに含まれて表示されているがref
はconst,const,const
すべきではありませんか?
アップデート2016年10月7日
問合せ:
select rowID from inventory where TID=4 and CID=28 and value=3290843588097;
私はそれを約10回を走り、最後の5つの時間を要した(彼らは同じであった)
- インデックスなし - 0.02秒
- 指数(TID、CID) - 0.03秒
- 指数(TID、CID、値) - 0.00秒
また同じクエリが今日異なって見える説明、か??キーlenが88
に変更され、照会がconst,const,const
に変更され、検査する行が2
に縮小されていることに注意してください。
mysql> explain select rowID from inventory where TID=4 and CID=28 and value='3290843588097';
+----+-------------+-----------+------+----------------------+---------------------+---------+-------------------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-----------+------+----------------------+---------------------+---------+-------------------+------+-------------+
| 1 | SIMPLE | inventory | ref | index_TID_CID_value | index_TID_CID_value | 88 | const,const,const | 2 | Using where |
+----+-------------+-----------+------+----------------------+---------------------+---------+-------------------+------+-------------+
1 row in set (0.04 sec)
テーブルにTID、CID、valueの組み合わせがいくつありますか? – Mackers
imo、そのクエリのインデックスを使用する点はあまりありません。ただ1つのテーブルをスキャンするほうが速くなりますか?あなたは 'mysql analyze table' - https://dev.mysql.com/doc/refman/5.5/en/analyze-table.htmlを使っていますか?つまり、それらのインデックスはどのように選択的ですか? –
@Mackers 1の組み合わせ –