Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql &引用;哪里在……“中&引用;哪里…!=&引用;查询索引问题_Mysql_Sql_Database_Indexing - Fatal编程技术网

Mysql &引用;哪里在……“中&引用;哪里…!=&引用;查询索引问题

Mysql &引用;哪里在……“中&引用;哪里…!=&引用;查询索引问题,mysql,sql,database,indexing,Mysql,Sql,Database,Indexing,我正在使用MySQl数据库 我知道,如果我为一列创建一个索引,使用该列索引可以快速查询表中的数据。但是,我仍然有以下问题: (假设我有一个名为cars的表,有一个名为country的列,我已经为country列创建了索引) 例如,我知道查询SELECT*FROM cars WHERE country='japan'将使用列country上的索引来查询数据,这非常快速。那呢=操作?将从国家/地区的汽车中选择*日本",是否也使用索引查询数据 是否在哪里。。。在…操作中是否使用索引查询数据?例如,SE

我正在使用MySQl数据库

我知道,如果我为一列创建一个索引,使用该列索引可以快速查询表中的数据。但是,我仍然有以下问题:

(假设我有一个名为cars的表,有一个名为country的列,我已经为country列创建了索引)

  • 例如,我知道查询
    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不使用索引。它们是否会被使用取决于一些额外的因素