除了MySQL表中的主键之外,我还需要单独的索引吗?

时间:2014-06-27 02:46:46

标签: mysql sql database sqlite

我的表架构是

  

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

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

  

SELECT Name,来自ITEMS的令牌,其中name = shoes

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

我是否需要添加INDEX以便更快地检索数据?我已经为此表提供了INDEX,因为有一个PRIMARY KEY

2 个答案:

答案 0 :(得分:2)

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

如果您将其定义为:

 PRIMARY_KEY(Name, Time)

然后您的查询可以利用索引。

MySQL在复合索引here上有很好的文档。

答案 1 :(得分:0)

使用PRIMARY_KEY(Time, NAME)创建索引时,将连接这些值。 MySQL无法使用此索引通过NAME进行搜索。

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

EXPLAIN SELECT Name, Token from ITEMS where name = shoes

密切注意标记的输出"其中"。这告诉MySQL在所有索引耗尽后需要手动获取和检查的记录数。无需等待或盲目测试。