在MySQL数据库中我有下表:
我还有3个二级指数:
该表包含~2.5M行,约为500MB
虽然我的复杂查询运行速度很快,但我对这两个简单的查询有很大的延迟:
Select id, sequence, PosData
From myTable
Where serialNumber = 130541
and command = "myCommand"
and startTime = "20140106194300"
and endtime = "20140106200000"
(〜4.4sec)
Select id
From myTable
Where serialNumber = 130541
and command = 'myCommand'
and sequence = 128
(〜4.5sec)
更多指数如
或
会加快查询速度吗?
在第一个查询中,startTime和endTime的数据类型是否可能成为问题?如果它们是int而不是varchar,那会更好吗?
还有其他建议吗?
答案 0 :(得分:1)
(serialnumber, command)
上的单个索引将最终提高这两个查询的效果。此外,您可以添加其他列以使其更快。但是,其他列的最佳选择取决于数据分布以及更常执行两个语句中的哪一个的问题。如果其他两列非常具有选择性,那么甚至可能不值得添加这些列。
startdate
和enddate
的数据类型至少是不幸的。正确的类型将提高从“一点”到“很多”的范围内的性能,具体取决于您的SQL。上面的SQL将处于“一点”范围内。
一些参考: