我有一个很大的查询,我试图改进它的一部分,但由于缓存机制和t-sql代码的简单性,我没有可靠的环境来测试速度。我想要提高速度的查询全部持续大约1或2秒,所以我看不出明显的差别。为每个比较创建虚拟数据需要太多时间。你建议我做什么?我正在使用我的公司数据库,所以每次删除缓存都可能是有害的,我猜。SQL Server如何比较简单查询的速度
编辑: 看完所有的评论后,我做了一些评论,并有一些想法。但在统计数据中查看所有这些值是否正是我想要的?
这里是我所面临的问题:
执行计划:首先,我运行一些查询,看着执行计划,在顶部 - 查询成本(相对于批)我不能得到一个价值不是0.00%。即使我的查询持续超过1分钟。只有我得到的是0.00%。并根据图表,所有的值为0%
DB统计。现在我正在测试两个查询。其中之一是
SELECT * FROM MY_TABLE /* WHERE
my_primarykey LIKE '%ht_atk%' */
,第二个是评论的免费版本。
SELECT * FROM MY_TABLE WHERE
my_primarykey LIKE '%ht_atk%'
这里从数据库统计我的结果,第一次查询:。
Application Profile Statistics
Timer resolution (milliseconds) 0 0
Number of INSERT, UPDATE, DELETE statements 0 0
Rows effected by INSERT, UPDATE, DELETE statements 0 0
Number of SELECT statements 2 2
Rows effected by SELECT statements 16387 15748,4
Number of user transactions 7 6,93182
Average fetch time 0 0
Cumulative fetch time 0 0
Number of fetches 0 0
Number of open statement handles 0 0
Max number of opened statement handles 0 0
Cumulative number of statement handles 0 0
Network Statistics
Number of server roundtrips 3 3
Number of TDS packets sent 3 3
Number of TDS packets received 252 242,545
Number of bytes sent 868 861,091
Number of bytes received 1,01917e+006 981160
Time Statistics
Cumulative client processing time 0 0,204545
Cumulative wait time on server replies 25 10,0455
第二个查询:
Application Profile Statistics
Timer resolution (milliseconds) 0 0
Number of INSERT, UPDATE, DELETE statements 0 0
Rows effected by INSERT, UPDATE, DELETE statements 0 0
Number of SELECT statements 2 2
Rows effected by SELECT statements 14982 15731,3
Number of user transactions 5 6,88889
Average fetch time 0 0
Cumulative fetch time 0 0
Number of fetches 0 0
Number of open statement handles 0 0
Max number of opened statement handles 0 0
Cumulative number of statement handles 0 0
Network Statistics
Number of server roundtrips 3 3
Number of TDS packets sent 3 3
Number of TDS packets received 230 242,267
Number of bytes sent 752 858,667
Number of bytes received 932387 980076
Time Statistics
Cumulative client processing time 1 0,222222
Cumulative wait time on server replies 8 10
我每次执行,该值是随机变化的,我不能够赶上一个很好的观点哪个查询速度更快。
最后当我做到这一点:
SET STATISTICS TIME ON SET STATISTICS IO ON
两个查询,结果是一样的。
表'my_TABLE'。扫描计数1,逻辑读取682,物理读取0,预读读取0.
因此,我再次无法对这两个查询进行比较。如何解释结果?我在找错地方吗?我如何比较以上两个简单查询?
当你在开始时使用类似%的查询时,查询将扫描整个表以比较主键的内容。不幸的是,它不能使用任何索引。这就是为什么逻辑读取总是相同的原因,无论您访问整个表格还是添加类似的语句。 你为什么要在主键上做一个类似的事情?是不是ht_atk就像是在主键或类似的连接类别? – 2010-01-18 16:30:29