【问题标题】:Do i need separate index in addition to primary key in a MySQL table?除了 MySQL 表中的主键之外,我还需要单独的索引吗?
【发布时间】:2014-06-27 02:46:45
【问题描述】:

我的表架构是

创建表项(时间,名称,令牌)PRIMARY_KEY(时间,名称)。

其中 Time 是创建项目的时间戳。当我进行以下查询时

SELECT Name, Token from ITEMS where name = shoes

加载数据需要一些时间,因为我的表有超过一百万行。

我是否需要添加INDEX 才能更快地检索数据?我已经有一个INDEX 用于此表,因为有一个PRIMARY KEY

【问题讨论】:

  • 主键已经是索引。可以考虑给 Token 添加索引。

标签: mysql sql database sqlite


【解决方案1】:

name 需要一个单独的索引。主键索引可以处理名称,但只能与time结合使用。

如果您将其定义为:

 PRIMARY_KEY(Name, Time)

那么您的查询可以利用索引。

MySQL 有很好的关于复合索引的文档here

【讨论】:

    【解决方案2】:

    当您使用PRIMARY_KEY(Time, NAME) 创建索引时,这些值将被连接起来。 MySQL 无法使用该索引按 NAME 进行搜索。

    顺便说一句,如果您在查询前使用 EXPLAN 关键字,您可能会从查询优化器中获得很多有用的提示,如下所示:

    EXPLAIN SELECT Name, Token from ITEMS where name = shoes
    

    密切关注标记为“where”的输出。这告诉 MySQL 需要在所有索引用尽后手动获取和检查多少记录。无需等待或盲目测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-20
      • 1970-01-01
      • 2018-10-02
      • 2012-05-19
      • 2013-01-16
      • 1970-01-01
      • 1970-01-01
      • 2011-05-06
      相关资源
      最近更新 更多