Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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 varchar上的索引列不工作_Mysql_Indexing - Fatal编程技术网

Mysql varchar上的索引列不工作

Mysql varchar上的索引列不工作,mysql,indexing,Mysql,Indexing,我有索引列“唯一标识符”。当我使用索引列获取数据时,它不是使用索引获取的 mysql> show index from stock_index_table; +-------------------+------------+-------------------+--------------+-------------------+-----------+-------------+----------+--------+------+------------+-----

我有索引列“唯一标识符”。当我使用索引列获取数据时,它不是使用索引获取的

    mysql> show index from stock_index_table;
    +-------------------+------------+-------------------+--------------+-------------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    | Table             | Non_unique | Key_name          | Seq_in_index | Column_name       | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
    +-------------------+------------+-------------------+--------------+-------------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    | stock_index_table |          0 | PRIMARY           |            1 | id                | A         |        4393 |     NULL | NULL   |      | BTREE      |         |               |
    | stock_index_table |          1 | unique_identifier |            1 | unique_identifier | A         |        4393 |     NULL | NULL   |      | BTREE      |         |               |
当使用“explain extended”进行检查时,会显示“using where”而不是“using index”。这是否意味着无法使用索引列获取数据?下面是select查询的“解释扩展”结果

    mysql> explain extended select id 
       from stock_index_table
       where unique_identifier='Nifty' ;
    +----+-------------+-------------------+------+-------------------+-------------------+---------+-------+------+----------+--------------------------+
    | id | select_type | table             | type | possible_keys     | key               | key_len | ref   | rows | filtered | Extra                    |
    +----+-------------+-------------------+------+-------------------+-------------------+---------+-------+------+----------+--------------------------+
    |  1 | SIMPLE      | stock_index_table | ref  | unique_identifier | unique_identifier | 52      | const |    1 |   100.00 | Using where; Using index |
    +----+-------------+-------------------+------+-------------------+-------------------+---------+-------+------+----------+--------------------------+
“explain”的结果应该是这样的

    +--------------------------+
    | Extra                    |
    +--------------------------+
    | Using index              |
    +--------------------------+

如何获取数据取决于查询优化器,可能是对于一个小表,所有索引都被忽略。
也可能是您的查询不合适,我们必须能够查看表和查询,以查看是否还有其他可以执行的操作。

如何获取数据取决于查询优化器,可能是对于一个小表,所有索引都被忽略。
也可能是您的查询不适合,我们必须能够查看表和查询,以查看是否还有其他可以执行的操作。

请不要将非唯一索引命名为“unique…”来混淆问题

EXPLAIN
看起来很理想

“使用索引”(意思是“覆盖”)表示只需要索引。你有

PRIMARY KEY(id),
INDEX(unique_identifier)
您似乎正在使用InnoDB。这意味着索引实际上是
(unique_identifier,id)
,因为(在InnoDB中),PK被悄悄地添加到任何二级索引中

因为查询只需要这两列,所以它是“覆盖”的

由于假定该列显示不止一次,因此它需要是“ref”和“using where”。“Rows=1”只是因为统计数据推断该列非常接近于唯一

死刑将被执行

  • 向下钻取B+树中的索引,以查找第一个出现的“Nifty”
  • 向前扫描(这在InnoDB使用的B+树中是有效的),直到它找到一个不是“漂亮”的条目

因此,它将触及索引中的一个额外“行”。如果它是唯一的,则不需要向前扫描。

请不要将非唯一索引命名为“唯一…”,以免混淆

EXPLAIN
看起来很理想

“使用索引”(意思是“覆盖”)表示只需要索引。你有

PRIMARY KEY(id),
INDEX(unique_identifier)
您似乎正在使用InnoDB。这意味着索引实际上是
(unique_identifier,id)
,因为(在InnoDB中),PK被悄悄地添加到任何二级索引中

因为查询只需要这两列,所以它是“覆盖”的

由于假定该列显示不止一次,因此它需要是“ref”和“using where”。“Rows=1”只是因为统计数据推断该列非常接近于唯一

死刑将被执行

  • 向下钻取B+树中的索引,以查找第一个出现的“Nifty”
  • 向前扫描(这在InnoDB使用的B+树中是有效的),直到它找到一个不是“漂亮”的条目

因此,它将触及索引中的一个额外“行”。如果它是
唯一的
,则无需提前扫描。

您可能会发现阅读此内容很有帮助:这里是否存在实际问题,或者只是索引未被使用而困扰您?您的查询速度慢吗?请提供
SHOW CREATE TABLE
。您可能会发现阅读此内容很有帮助:这里是否存在实际问题,或者只是索引未被使用而困扰您?您的查询速度慢吗?请提供
SHOW CREATE TABLE