问题是关于最佳实践的。
如何进行可靠的SQL查询测试?
问题是关于数据库结构和 SQL 查询本身的优化,而不是系统和数据库性能、缓冲区、缓存。
当你有一个包含大量连接等的复杂查询时,有一天你需要了解如何优化它,你就来 EXPLAIN
命令( mysql::explain , postresql::explain )来研究执行计划。
调整数据库结构后,您可以执行查询来查看性能变化,但这里您处于多级优化/缓冲/缓存的范围内。如何避免这种情况?我需要纯粹时间来执行查询,并确保它不受影响。
如果您知道不同服务器的不同做法,请明确指定:mysql、postgresql、mssql 等。
谢谢。
最佳答案
对于 Microsoft SQL Server,您可以使用 DBCC FREEPROCCACHE
(删除已编译的查询计划)和 DBCC DROPCLEANBUFFERS
(清除数据缓存)来确保您从完全未缓存的状态。然后,您可以分析未缓存和缓存的性能,并准确确定这两种情况下的性能。
即便如此,很多时候您会在不同时间得到不同的结果,具体取决于查询的复杂程度以及服务器上发生的其他情况。通常明智的做法是在不同的操作场景中多次测试性能,以确保您了解查询的完整性能概况。
我确信其中许多一般原则也适用于其他数据库平台。
关于mysql - SQL查询优化与调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6794825/