mysql - SQL查询优化与调试

标签 mysql sql database postgresql optimization

问题是关于最佳实践的。

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

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

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

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

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

谢谢。

最佳答案

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

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

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

关于mysql - SQL查询优化与调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6794825/

相关文章:

java - 使用struts时jdbc mysql数据源连接错误

java - JPA 可在 Eclipse 上运行,但不能在 JAR 上运行

php - 错误 MysqliDb::$_paramTypeList

java - 使用 Criteria 运行子查询时出现 ClassCastException (String to Long)

sql - 加入指定列取决于结果的位置

sql - 用户不使用 SQL Server 2014 中分配的默认架构创建表

mysql - 枚举数据类型与 MySQL 中的数据表?

mysql - 错误 2002 (HY000) : Cant connect to local MySQL server through '/var/run/mysqld/mysqld.sock' (2)

sql - 从 SQL Server 问题查询 LDAP

php - Laravel Eloquent Relationships - 两个不同的送货地址与一个订单模型相关联