Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.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_Sqlite - Fatal编程技术网

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

在MySQL表中,除了主键之外,我还需要单独的索引吗?,mysql,sql,database,sqlite,Mysql,Sql,Database,Sqlite,我的表模式是 创建表项(时间、名称、令牌)主键(时间、名称) 其中时间是创建项目的时间戳。当我执行以下查询时 从Name=shoes 加载数据需要一段时间,因为我的表有超过百万行 我是否需要添加索引,以便更快地检索数据?我已经有了这个表的索引,因为有一个主键 您需要为名称创建单独的索引。主键索引可以处理名称,但只能与time结合使用 如果您将其定义为: PRIMARY_KEY(Name, Time) 然后您的查询可以利用索引 MySQL在复合索引方面有很好的文档。当您使用主键(时间、名称)创

我的表模式是

创建表项(时间、名称、令牌)主键(时间、名称)

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

从Name=
shoes

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


我是否需要添加
索引
,以便更快地检索数据?我已经有了这个表的
索引
,因为有一个
主键

您需要为
名称
创建单独的索引。主键索引可以处理名称,但只能与
time
结合使用

如果您将其定义为:

 PRIMARY_KEY(Name, Time)
然后您的查询可以利用索引


MySQL在复合索引方面有很好的文档。

当您使用
主键(时间、名称)
创建索引时,这些值将被连接起来。MySQL无法使用此索引按名称进行搜索

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

EXPLAIN SELECT Name, Token from ITEMS where name = shoes

关注标有“where”的输出。这说明MySQL在所有索引耗尽后需要手动获取和检查多少条记录。无需等待或盲测试。

主键已被索引。您可以考虑向令牌添加索引。