【问题标题】:SQL query optimization and debuggingSQL查询优化与调试
【发布时间】:2011-10-11 07:26:55
【问题描述】:

问题是关于最佳实践。

如何进行可靠的 SQL 查询测试?

问题在于优化数据库结构和 SQL 查询本身,而不是系统和数据库性能、缓冲区、缓存。

当你有一个复杂的查询,有很多连接等,有一天你需要了解如何优化它,你来EXPLAIN命令(mysql::explainpostresql::explain)研究执行计划。

调整数据库结构后,您可以执行查询以查看任何性能变化,但此时您处于多级优化/缓冲/缓存的范围内。如何避免这种情况?我需要 时间来执行查询并确保它不受影响。

如果您知道不同服务器的不同做法,请明确指定:mysql、postgresql、mssql 等。

谢谢。

【问题讨论】:

    标签: mysql sql database postgresql optimization


    【解决方案1】:

    对于 Microsoft SQL Server,您可以使用 DBCC FREEPROCCACHE(删除已编译的查询计划)和 DBCC DROPCLEANBUFFERS(清除数据缓存)来确保您从完全未缓存的状态开始。然后,您可以分析未缓存和缓存的性能,并准确确定这两种情况下的性能。

    即便如此,很多时候您会在不同的时间得到不同的结果,具体取决于您的查询的复杂程度以及服务器上发生的其他情况。通常明智的做法是在不同的操作场景中多次测试性能,以确保您了解查询的完整性能概况。

    我确信这些一般原则中的许多也适用于其他数据库平台。

    【讨论】:

      【解决方案2】:

      在 PostgreSQL 世界中,您需要刷新数据库缓存以及操作系统缓存,因为 PostgreSQL 利用操作系统缓存系统。

      查看此链接进行一些讨论。

      http://archives.postgresql.org/pgsql-performance/2010-08/msg00295.php

      【讨论】:

        【解决方案3】:

        为什么需要执行时间?这取决于很多因素,在实时服务器上几乎没有意义。我建议从实时服务器收集一些统计数据并使用pgfouine 工具(它用于 postgresql)分析查询执行时间并根据它做出决策。您将确切地看到您需要调整哪些内容以及您对报告所做的更改的效果如何。

        【讨论】:

        • 好的,谢谢你的链接。是的,您是对的,但是您知道要优化哪个查询的人会遇到后续问题。对于 mysql 也有很好的日志分析器:myprofi.sourceforge.net
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-24
        • 1970-01-01
        • 1970-01-01
        • 2015-09-25
        • 2013-01-10
        • 2014-02-04
        相关资源
        最近更新 更多