国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > SQL Server > 正文

sql 百萬(wàn)級(jí)數(shù)據(jù)庫(kù)優(yōu)化方案分享

2020-07-25 13:02:22
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

1.對(duì)查詢(xún)進(jìn)行優(yōu)化,應(yīng)盡量避免全表掃描,首先應(yīng)考慮在 where 及 order by 涉及的列上建立索引。

2.應(yīng)盡量避免在 where 子句中對(duì)字段進(jìn)行 null 值判斷,否則將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描,如:
select id from t where num is null

可以在num上設(shè)置默認(rèn)值0,確保表中num列沒(méi)有null值,然后這樣查詢(xún):
select id from t where num=0

3.應(yīng)盡量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進(jìn)行全表掃描。

4.應(yīng)盡量避免在 where 子句中使用 or 來(lái)連接條件,否則將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描,如:
select id from t where num=10 or num=20

可以這樣查詢(xún):
select id from t where num=10
union all
select id from t where num=20

5.in 和 not in 也要慎用,否則會(huì)導(dǎo)致全表掃描,如:
select id from t where num in(1,2,3)

對(duì)于連續(xù)的數(shù)值,能用 between 就不要用 in 了:
select id from t where num between 1 and 3

6.下面的查詢(xún)也將導(dǎo)致全表掃描:
select id from t where name like ‘%abc%'
若要提高效率,可以考慮全文檢索。

7.如果在 where 子句中使用參數(shù),也會(huì)導(dǎo)致全表掃描。因?yàn)镾QL只有在運(yùn)行時(shí)才會(huì)解析局部變量,但優(yōu)化程序不能將訪問(wèn)計(jì)劃的選擇推遲到運(yùn)行時(shí);它必須在編譯時(shí)進(jìn)行選擇。然 而,如果在編譯時(shí)建立訪問(wèn)計(jì)劃,變量的值還是未知的,因而無(wú)法作為索引選擇的輸入項(xiàng)。如下面語(yǔ)句將進(jìn)行全表掃描:
select id from t where num=@num

可以改為強(qiáng)制查詢(xún)使用索引:
select id from t with(index(索引名)) where num=@num
.應(yīng)盡量避免在 where 子句中對(duì)字段進(jìn)行表達(dá)式操作,這將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描。如:
select id from t where num/2=100

應(yīng)改為:
select id from t where num=100*2

9.應(yīng)盡量避免在where子句中對(duì)字段進(jìn)行函數(shù)操作,這將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描。如:
select id from t where substring(name,1,3)='abc'

主站蜘蛛池模板: 增城市| 临海市| 宣恩县| 延庆县| 武鸣县| 乐亭县| 铜陵市| 祁连县| 陆良县| 东台市| 三都| 麻江县| 华安县| 菏泽市| 田林县| 琼结县| 新兴县| 都昌县| 拉孜县| 涞水县| 清远市| 东至县| 湘阴县| 大厂| 犍为县| 阜新市| 石嘴山市| 荆州市| 乐业县| 迁安市| 兰西县| 庆安县| 怀化市| 习水县| 含山县| 龙海市| 吉林省| 九寨沟县| 新源县| 五华县| 朔州市|