【问题标题】:Optimizing single-row queries from large tables in MySQL优化 MySQL 中大表的单行查询
【发布时间】:2009-03-02 02:00:05
【问题描述】:

我正在处理 MySQL 表,这些表本质上是在带有单个百叶窗的模拟办公室上进行光线跟踪模拟的结果。我通常需要检索模拟结果以获取时间和盲人设置的独特组合。所以我最终做了很多

SELECT result FROM results WHERE timestamp='2005-05-05 12:30:25' \
         AND opening=40 AND slatangle=60

这看起来值得优化,因为这个查询永远不会返回超过一行。在唯一标识每一行的三列上定义索引是否有意义?或者我可以使用其他技术吗?

【问题讨论】:

    标签: mysql optimization


    【解决方案1】:

    答案肯定是肯定的。如果您在时间戳上定义唯一索引,则打开和 slatangle MySQL 应该能够以很少的磁盘查找找到您的行。

    您可以尝试在时间戳、开盘、slateangle 和结果上创建索引。 MySQL 可能完全不接触数据文件就可以从索引中获取您的数据。

    MySQL 手册有一个section about optimzing queries

    【讨论】:

      【解决方案2】:

      我建议添加 限制 1; 到查询结束。

      威廉

      【讨论】:

        【解决方案3】:

        我不建议添加 3 个索引。使用所有三列的索引可能会更好,甚至在该组合上设置唯一的主键也是最好的 - 前提是您确定它是唯一的。

        【讨论】:

          【解决方案4】:

          是的,创建多列索引会有所帮助。您还应该测试不同列顺序的性能,即 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/

          【讨论】:

            猜你喜欢
            • 2016-04-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-04-09
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多