我正在处理MySQL表,这些表基本上是在带有单个百叶窗的模拟办公室房间进行光线跟踪模拟的结果。我通常需要检索模拟结果,以获得时间和盲目设置的独特组合。所以我最终做了很多
SELECT result FROM results WHERE timestamp='2005-05-05 12:30:25' \
AND opening=40 AND slatangle=60
这看起来很可疑,因为此查询永远不会返回多行。在三列上定义唯一标识每一行的索引是否有意义?或者我可以使用其他技术吗?
答案 0 :(得分:3)
答案肯定是肯定的。如果你在时间戳上定义一个唯一索引,那么打开和slatangle MySQL应该能够找到你的行,只需很少的光盘搜索。
您可以尝试在timestamp,opening,slateangle和result上创建索引。 MySQL可能能够从索引中获取数据而根本不会触及数据文件。
MySQL手册有一个section about optimzing queries。
答案 1 :(得分:3)
我建议添加 限制1; 到查询结束。
威廉
答案 2 :(得分:2)
我不建议添加3个索引。使用所有三列的索引可能更好,甚至在该组合上设置唯一的主键也是最好的 - 只有当您确定它是唯一的时。
答案 3 :(得分:2)
是的,创建多列帮助的索引。您还应该测试不同列顺序的性能,即 O(c1,c2,c3)!= O(c2,c1,c3)
看看
http://joekuan.wordpress.com/2009/01/23/mysql-optimize-your-query-to-be-more-scalable-part-12/ http://joekuan.wordpress.com/2009/01/23/mysql-optimize-your-query-to-be-more-scalable-part-22/