Mysql &引用;哪里在……“中&引用;哪里…!=&引用;查询索引问题
我正在使用MySQl数据库 我知道,如果我为一列创建一个索引,使用该列索引可以快速查询表中的数据。但是,我仍然有以下问题: (假设我有一个名为cars的表,有一个名为country的列,我已经为country列创建了索引)Mysql &引用;哪里在……“中&引用;哪里…!=&引用;查询索引问题,mysql,sql,database,indexing,Mysql,Sql,Database,Indexing,我正在使用MySQl数据库 我知道,如果我为一列创建一个索引,使用该列索引可以快速查询表中的数据。但是,我仍然有以下问题: (假设我有一个名为cars的表,有一个名为country的列,我已经为country列创建了索引) 例如,我知道查询SELECT*FROM cars WHERE country='japan'将使用列country上的索引来查询数据,这非常快速。那呢=操作?将从国家/地区的汽车中选择*日本",是否也使用索引查询数据 是否在哪里。。。在…操作中是否使用索引查询数据?例如,SE
SELECT*FROM cars WHERE country='japan'
将使用列country上的索引来查询数据,这非常快速。那呢=代码>操作?将从国家/地区的汽车中选择*日本",代码>是否也使用索引查询数据
在哪里。。。在…
操作中是否使用索引查询数据?例如,SELECT*来自国家('japan'、'usa'、'sweden')的汽车代码>
两个查询都将使用索引(假设有一个索引,第一列是
country
)
如有疑问,请使用。您还需要阅读(至少部分)一般答案是:视情况而定。这取决于数据库优化器认为检索数据的最佳方式是什么,其决策可能需要数据的分布
例如,如果99%的行具有country='japan',则第一个查询(
=
)可能不会使用索引,而是具有的国家=
将使用它。您可以使用解释选择
来确定查询是否使用索引
例如:
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 |
+------+---------+------+------+-------------+
在这种情况下,查询没有可能的\u键
,因此使用no键
进行查询。这是您感兴趣的键
列
更多信息请点击此处:
EXPLAIN SELECT * FROM CARS WHERE `country` != 'japan'
您可以运行explain和your查询,查看mysql是否使用您的index-1,设置索引并不保证(My)或任何SQL都会使用索引。重要的是索引的基数和MySQL认为将被查询命中的行的百分比。我想你是对的。正确答案应该是“两者都不是”<代码>=nor
IN()
使MySQL不使用索引。它们是否会被使用取决于一些额外的因素