在对性能的永无止境的追求(以及我自己的大刀阔斧的经历)中,我学到了一些可能会降低 SQL 语句性能的东西。
Obsessive Compulsive Subqueries Disorder
进行疯狂的类型转换(并将它们嵌套到遗忘中)
Group By 对所述疯狂类型转换的聚合函数在
哪里 fldID(从我的 500 万记录表中选择所有内容)
我通常使用 MSSQL。有哪些工具可用于测试 SQL 语句的性能?这些工具是否内置并特定于每种类型的数据库服务器?或者有没有通用的工具?
在对性能的永无止境的追求(以及我自己的大刀阔斧的经历)中,我学到了一些可能会降低 SQL 语句性能的东西。
Obsessive Compulsive Subqueries Disorder
进行疯狂的类型转换(并将它们嵌套到遗忘中)
Group By 对所述疯狂类型转换的聚合函数在
哪里 fldID(从我的 500 万记录表中选择所有内容)
我通常使用 MSSQL。有哪些工具可用于测试 SQL 语句的性能?这些工具是否内置并特定于每种类型的数据库服务器?或者有没有通用的工具?
SQL Profiler(内置):使用 SQL Profiler 进行监控
SQL Benchmark Pro(商业版)
SQL Server 2008 具有新的数据收集器
SQL Server 2005(更高版本)有一个缺失索引动态管理视图(DMV),它非常有用(但仅适用于当前在计划缓存中的查询计划):关于缺失索引功能。
还有一个 SQL Server数据库引擎优化顾问,它做了一个合理的工作(只是不要实现它建议的一切!)
我大多只使用 Profiler 和执行计划查看器
执行计划是调试查询性能问题时首先要考虑的事情之一。执行计划将告诉您查询的每个部分大致花费了多少时间,并可用于快速识别您是否缺少索引或是否有昂贵的连接或循环。
MSSQL 有一个数据库调优顾问,它通常会根据调优期间运行的常见查询为表推荐索引,但它不会为您重写查询。
在我看来,经验和实验是编写好的 SQL 查询的最佳工具。
在 mysql(也可能在其他数据库中)中,您可以EXPLAIN
查询以查看数据库服务器对它的看法。这通常用于决定应该创建哪些索引。而且这个是内置的,所以你可以在不安装额外软件的情况下使用它。
Adam Machanic 有一个名为SqlQueryStress的简单工具,它可能很有用。它旨在用于“针对单个查询运行快速性能测试,以测试想法或验证更改”。