資料庫 查詢優化

2021-10-11 09:13:03 字數 2012 閱讀 3096

當我們的where過濾的字段沒有索引時,就會發生全表掃瞄,如下,當我們的name欄位沒有索引時,就會發生全部掃瞄

select

*from dbo.pages

where name =

'home'

當欄位擁有索引時,我們對欄位使用函式或表示式也會發生全表掃瞄

-- 這裡會發生全表掃瞄

select

*from dbo.pages

where substring(name,1,

2)='ho'

-- 改進:使用like

select

*from dbo.pages

where name like

'ho%'

-- 這裡會發生全表掃瞄

select

*from dbo.pages

where postnum/2=

10-- 改進

select

*from dbo.pages

where postnum =10*

2

負向查詢會引發全表掃瞄,如下是負向查詢符號

not, !=, <>, !<, not exists, not in

非負向查詢符號

=, <, >, >=, <=, between, link(同配符在後面是是非負,如』陳%』)

我們應該可以使用or和and將非負向查詢符號替換負向查詢符號

-- 這裡會發生全表掃瞄

select

*from dbo.pagedatas

where click !=

0-- 改進:使用like

select

*from dbo.pagedatas

where click <

0or click >

0

and連線的多個字段,如果有乙個欄位有索引,那麼資料庫會優先通過該欄位篩選出資料,其他欄位則在該篩選的基礎上篩選,所以and連線的字段中只要有乙個欄位有索引,就可以大幅度提供搜尋速度

or不一樣,or連線的多個字段必須每個欄位都有索引,否則會引發全表掃瞄

當我們使用and或or連線多個條件時,sqlserver得where會先查詢最右邊的條件,如果最右邊的條件能篩選出乙個較小的結果集,那麼在執行接下來的條件時會遍歷的很少

– 幾乎所有人的 age 都大於

– 第一次篩選對整個表進行篩選,結果集也差不多是整個表

– 第二次也是對整個表進行選項

select

*from dbo.person

where name =

'cql'

and age >

2-- 改進

select

*from dbo.person

where age >

2and name =

'cql'

注:現在的資料庫都有查詢優化器,可以優化where的順序,不改進問題也不大

如下 t 就是內嵌檢視

select

*from

(select

top5

*from dbo.pages

)as t

伺服器想要資料庫執行sql語句,會傳送sql語句給資料庫,如果sql語句很大,應該考慮使用儲存過程代替sql語句

對於具有索引的查詢,分表的效能優化不大,例如從200萬的行資料查詢某一行,通過主鍵最多執行21個步驟,而通過沒有索引的字段查詢則需200萬次,如果將該錶分為2個表,則通過主鍵最多執行20個步驟,而通過沒有索引的字段查詢則需100萬步驟

雖然如此,但我們還是說一下得說一下分表

基於物件導向得建模,如「人」表有3個人群,分別為「小孩」、「中年」、「老年」,這3個實體均繼承「人」這個實體,我們可以使用ef得tpc模式將這3個實體得資料分別對映到3個表中

分庫時間上就是劃分子系統,將乙個大系統分為多個子系統,每個子系統都擁有自己得資料庫

資料庫查詢優化

方法 1 1.對查詢進行優化,應盡量避免全表掃瞄,首先應考慮在 where 及 order by 涉及的列上建立索引。步驟閱讀 22.應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃瞄,如 select id from t where num is...

資料庫查詢優化

本記載,用於保留面對大資料量時,查詢速率待優化,只記錄要點,具體如何操作,還需查詢 1 索引優化 通過建立合理高效的索引,提高查詢的速度.2 sql優化 根據需求,組織優化sql語句,使查詢效率達到最優,在很多情況下要考慮索引的作用 3 水平拆分 如果表的資料量增長特變塊,索引帶來的效能優化可能達到...

資料庫查詢優化

1 對查詢進行優化,應盡量避免全表掃瞄,首先應考慮在 where 及 order by 涉及的列上建立索引。2 應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃瞄 如 select id from t where num is null 可以在nu...