每当我发现从我的数据库中检索数据的性能很慢时,我会尝试确定我的SQL查询的哪个部分有问题,并尝试优化它并向表中添加一些索引。但这并不总是解决问题。
我的问题是:
是否有其他技巧可以使SQL服务器性能更好?
还有什么其他原因会导致SQL服务器性能变差?
我的问题是:
是否有其他技巧可以使SQL服务器性能更好?
还有什么其他原因会导致SQL服务器性能变差?
哦,还可能有其他问题。
这是一个非常广泛的问题,已经有很多答案了。但我想要补充一个重要因素 - 页面分裂
。问题在于,有好的分裂和坏的分裂。以下是一些好的文章,解释如何使用transaction_log
扩展事件来识别坏/恶劣的页面分裂:
你提到:
我试图优化它并添加一些索引
但是,有时候删除未使用的非聚集索引可以帮助提高性能,因为它有助于减少事务日志。阅读日志性能问题的主要原因
等待统计信息,或者请告诉我哪里不舒服可以帮助您了解如何使用等待统计信息进行性能分析。
要了解一些关于性能的新思路,请查看Performance Considerations - sqlmag.com
- 将连接中的表分别放在不同的磁盘上(用于并行磁盘I/O - 文件组)。
- 避免在具有少量唯一值的列上进行连接。
要了解JOIN
,请阅读高级JOIN技术
如果你是数据库新手并且可以访问数据库引擎调整顾问,那么你可以通过启发式调整来优化你的数据库。
基本上,你需要在 SQL Profiler 中捕获正在运行的 SQL 查询,然后将它们提供给 DETA。DETA 会有效地运行这些查询(不会更改你的数据),然后找出你的数据库缺少哪些信息(视图、索引、分区、统计等)以更好地执行这些查询。
然后它可以为你应用这些信息,并在未来监控它们。我并不是说要盲目相信 DETA 或者不去理解就去做事情,但我发现这绝对是一个很好的方式来了解你的查询正在做什么,花费多长时间,以及如何适当地为数据库建立索引。
另外,值得注意的是,在项目开始时投资于一个好的数据库管理员会更好,这样你就有了良好的结构和索引。但这并不是你现在所处的位置...