日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

百万数据下几种SQL性能测试

發(fā)布時間:2024/7/19 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 百万数据下几种SQL性能测试 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

今天閑來學(xué)習(xí)了一下SQL性能優(yōu)化方面的知識,有以下學(xué)習(xí)收獲,歡迎大家指點。

測試環(huán)境:90W,單條記錄約3KB,數(shù)據(jù)庫:MSSQL2005

測試前清除緩存

DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS

?

一、翻頁性能測試

1、Top
select top 10 * from message where? id not in (select top 20 id frommessage where classid=77 order by id desc ) and classid=77 order by id desc
2、Max/Top
select top 10 * from message where id <(select min(id) from messagewhere? id in(select top 20 id from message where classid=77 order by iddesc) ) and classid=77 order by id desc
3、row_number
select top 10 * from (select row_number()over(order by id desc) rownumber,*from message where classid=77)a where classid=77 and rownumber>20

MsSql翻頁性能測試

ID列索引

Top

Max/Top

row_number()

無索引

cpu

reads

duration

0

893

65

cpu

reads

duration

0

590

70

cpu

reads

duration

0

512

67

聚焦索引

cpu

reads

duration

0

37

66

cpu

reads

duration

0

98

64

cpu

reads

duration

0

28

67

非聚焦索引

cpu

reads

duration

0

895

63

cpu

reads

duration

0

592

66

cpu

reads

duration

0

514

66

?

?

?

?

?

?

?

?

?

?

?

?

結(jié)論:

1)從以上測試結(jié)果可以看出,不論是否索引排序字段,也不管是何種索引,row_number都能得到最高的性能,其次Max/Top的方式測試性能也不錯。

2)在使用非聚焦索引的情況下,性能并無任何提示,甚至要慢于無索引的情況,可能是因為SQL先要去查找索引表,然后根據(jù)索引結(jié)果再去查找實體表,在這過程浪費了資源。

3)聚焦索引也的正確應(yīng)用才能發(fā)揮其該有的優(yōu)勢啊!

綜合結(jié)果:row_number> max/top > top

?

二、in、or、union關(guān)鍵字性能測試

介于網(wǎng)上有很多關(guān)于in/or/union等關(guān)鍵字的性能討論,本人也小試了一把,測試結(jié)果如下。

?1、in

?select * from video where id in(100,101,102,103,104,105,106,107,108,109)

2、union

select * from video where id =100

union all select * from video where? id =101

union all select * from video where? id =102

union all select * from video where? id =103

union all select * from video where? id =104

union all select * from video where? id =105

union all select * from video where? id =106

union all select * from video where? id =107

union all select * from video where? id =108

union all select * from video where? id =109

3、or

select * from video where id=100 or id=101 or id=102 or id=103or id=104 or id=105 or id=106 or id=107 or id=108 or id=109

?

in PK or PK union

?

ID列索引

in

union

or

無索引

cpu

reads

duration

0

37

54

cpu

reads

duration

0

58

104

cpu

reads

duration

0

41

56

聚焦索引

cpu

reads

duration

0

44

54

cpu

reads

duration

0

54

58

cpu

reads

duration

0

40

54

非聚焦索引

cpu

reads

duration

0

43

53

cpu

reads

duration

16

61

62

cpu

reads

duration

0

43

54

?

?

?

?

?

?

?

?

?

?

?

?

?

結(jié)論:

1)? 網(wǎng)上很多資料說union的性能要高于in/or,但從我這測試的結(jié)果來看,不論是有無索引,union的性能都是最低的?不知是何原因?

2)? 網(wǎng)上流傳mssql會自己把in解析成or查詢,從這份測試結(jié)果來看,貌似不假!

3)? 雖然in/or會引起全表掃描,但別無選擇的情況下也是是能勝任很多工作的。

轉(zhuǎn)載于:https://www.cnblogs.com/haiyabtx/archive/2012/11/22/2783223.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的百万数据下几种SQL性能测试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。