解惑

解己之惑,解人之惑

Inner join的问题

这个是最近感觉最有成就的一个发现了。
我们的系统有一个存储过程执行一个很核心的查询功能,但是在某些情况下非常的慢,而且最近QA一直在做性能测试,每天发送大量的数据,导致系统的性能越来越慢,我原来也曾经优化过这个存储过程,建了很多索引,解决了那个时候管理员用户的问题,但是现在很多普通用户的问题更加的严重,经过调试发现第一步的查询非常的慢,打印出结果来发现那个查询会产生9千万条纪录,而且会使用多达6G的硬盘空间来存储临时数据,后来加了个distinct解决了空间问题,空间使用不到6M,但是速度还是很慢,使用Tuning Advisor优化也没有什么帮助,后来我想了下为什么会产生那么多相同的数据呢?仔细看了下SQL,发现它用6个表进行inner join,但是只从其中的四个表各取一个字段,我就把另外的两个表从inner join移到where条件了,查询时间从6分钟(问题最大的一个用户)减少到6秒,呵呵

(Visited 274 times, 1 visits today)

2 Comments

  1. SQL SERVER的数据库吗
    嵌套子查询的效率提升这么大?

  2. 呵呵,是inner join的用法有问题。

    现在感觉SQL Server很不稳定啊,修改过的那个结果在不同的服务器上的表现很不一致,昨天发现一个特定的参数的执行在其中一台机器上很慢,而在其它数据量更大的机器上执行快很多。
    打开执行计划看是因为索引检索的目标行数在那台机器上特别多。

发表评论

邮箱地址不会被公开。 必填项已用*标注

© 2024 解惑

本主题由Anders Noren提供向上 ↑