在MySQL表中,除了主键之外,我还需要单独的索引吗?
我的表模式是 创建表项(时间、名称、令牌)主键(时间、名称) 其中时间是创建项目的时间戳。当我执行以下查询时 从Name=在MySQL表中,除了主键之外,我还需要单独的索引吗?,mysql,sql,database,sqlite,Mysql,Sql,Database,Sqlite,我的表模式是 创建表项(时间、名称、令牌)主键(时间、名称) 其中时间是创建项目的时间戳。当我执行以下查询时 从Name=shoes 加载数据需要一段时间,因为我的表有超过百万行 我是否需要添加索引,以便更快地检索数据?我已经有了这个表的索引,因为有一个主键 您需要为名称创建单独的索引。主键索引可以处理名称,但只能与time结合使用 如果您将其定义为: PRIMARY_KEY(Name, Time) 然后您的查询可以利用索引 MySQL在复合索引方面有很好的文档。当您使用主键(时间、名称)创
shoes
加载数据需要一段时间,因为我的表有超过百万行
我是否需要添加
索引
,以便更快地检索数据?我已经有了这个表的索引
,因为有一个主键
您需要为名称
创建单独的索引。主键索引可以处理名称,但只能与time
结合使用
如果您将其定义为:
PRIMARY_KEY(Name, Time)
然后您的查询可以利用索引
MySQL在复合索引方面有很好的文档。当您使用
主键(时间、名称)
创建索引时,这些值将被连接起来。MySQL无法使用此索引按名称进行搜索
顺便说一句,如果您在查询前使用EXPLAN关键字,您可能会从查询优化程序获得很多有用的提示,如下所示:
EXPLAIN SELECT Name, Token from ITEMS where name = shoes
关注标有“where”的输出。这说明MySQL在所有索引耗尽后需要手动获取和检查多少条记录。无需等待或盲测试。主键已被索引。您可以考虑向令牌添加索引。