我正在使用MySQl数据库.
我知道如果我为列创建索引,则使用该列索引可以快速从表中查询数据.但是,我仍然有以下问题:
(假设我有一个名为cars的表,有一个名为country的列,并且已经为country列创建了索引)
>例如,我知道查询SELECT * FROM cars WHERE country =’japan’将使用列country上的索引来查询快速的数据. !=操作怎么样?将选择*从所在国家的汽车上!=’日本’;还使用索引来查询数据?
> WHERE … IN …操作是否使用索引查询数据?例如SELECT * FROM汽车所在的国家(例如“ japan”,“ usa”,“ sweden”);
解决方法:
您可以使用EXPLAIN SELECT来查找查询是否使用索引.
例如:
EXPLAIN SELECT *
FROM A
WHERE foo NOT IN (1,4,5,6);
可能的产量:
+----+-------------+-------+------+---------------
| id | select_type | table | type | possible_keys
+----+-------------+-------+------+---------------
| 1 | SIMPLE | A | ALL | NULL
+----+-------------+-------+------+---------------
+------+---------+------+------+-------------+
| key | key_len | ref | rows | Extra |
+------+---------+------+------+-------------+
| NULL | NULL | NULL | 2 | Using where |
+------+---------+------+------+-------------+
在这种情况下,查询没有可能的键,因此不使用键进行查询.这是您感兴趣的关键列.
此处有更多信息:
> http://dev.mysql.com/doc/refman/5.0/en/explain.html
> http://dev.mysql.com/doc/refman/5.0/en/optimization-indexes.html