Mysql SQL查询优化与调试

Mysql SQL查询优化与调试,mysql,sql,database,postgresql,optimization,Mysql,Sql,Database,Postgresql,Optimization,问题在于最佳实践 如何执行可靠的SQL查询测试? 也就是说,问题在于数据库结构和SQL查询本身的优化,而不是系统和数据库性能、缓冲区、缓存 当您有一个包含大量连接等的复杂查询时,有一天您需要了解如何优化它,然后来到EXPLAINcommand(,)来研究执行计划 在优化数据库结构之后,您可以执行查询以查看任何性能变化,但在这里,您需要进行多级优化/缓冲/缓存。如何避免这种情况?我需要执行查询的纯时间,并确保它不受影响 如果您知道不同服务器的不同做法,请明确指定:mysql、postgresql、

问题在于最佳实践

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

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

当您有一个包含大量连接等的复杂查询时,有一天您需要了解如何优化它,然后来到
EXPLAIN
command(,)来研究执行计划

在优化数据库结构之后,您可以执行查询以查看任何性能变化,但在这里,您需要进行多级优化/缓冲/缓存。如何避免这种情况?我需要执行查询的纯时间,并确保它不受影响

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


谢谢。

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

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


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

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

有关一些讨论,请参见此链接


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

好的,谢谢您的链接。是的,您是对的,但是您知道要优化哪个查询时会遇到后续问题。对于mysql,还有一个很好的日志分析器: