sql的優化的幾種方案

2021-08-18 17:27:27 字數 1373 閱讀 4725

(1)建立索引

建立表就要建立索引,選定那個欄位要建立索引,不要所有欄位都建立索引.經常查詢或經常當where條件的,建立索引。

使用索引好處,查詢快,不好的地方是進行insert、update、delete的時候慢,因為索引佔磁碟空間.

最好的方式是實現讀寫分離,讀的時候有索引,寫表裡沒有索引。

索引什麼時候失效?

索引失效實在使用like語句查詢時失效

組合什麼時候失效?比如id和name欄位是乙個組合索引。

1、順序顛倒時候失效,如where name=value and id = value這是順序顛倒

2、使用like語句時候失效

3、如果查詢時使用id查詢索引不失效,使用name查詢會失效

(2)sql本身優化

不用*,少用函式和like,不用巢狀語句等

(3)大表拆小表

①縱向拆分

大表拆小表,比如文章表字段有id/autor/title/content,content是乙個大字段,可以單獨拆到一張表裡.而且content用的時候比較少,所以拆到另外一張表裡可以增快查詢速度。

使用者表的id/name/nick_name/age/phone是常用資訊在一張表,愛好/描述/位址是不常用資訊,拆到另外一張表裡

②橫向拆分

把資料分表拆開,靠**控制關聯。

如果id是int,可以id的數值拆分。

根據日期拆分也可以。

我只要玩具的商品,剛開始只展示20條。

橫向拆分很少使用。因為有分頁和條件、索引等優化,所以幾乎很少有人用橫向拆分。

(4)加冗餘字段

不能所有的字段都加成冗餘字段,一定是不常變化的字段為冗餘字段

優化前:

汽車表:

id,name,汽車的尺寸,汽車顏色,汽車的生產廠家表的id欄位

生產廠家表

id,name,位址資訊。

我需要展示騎車的資訊列表,列表展示資訊中需要包含生產廠家時,如果left join,效率會低

如果在單錶中查詢,速度快,

我現在對資料庫進行新增冗餘字段,對資料庫資料優化,

優化後:

汽車表:

id,name,汽車的尺寸,汽車顏色,汽車的生產廠家表的id欄位,廠家的名字

生產廠家表

id,name,位址資訊。

什麼時候可以加冗餘字段?什麼情況下不可以加呢?

如果這個冗餘欄位的資料經常改變,就不建議加冗餘欄位了

(5)不建立外來鍵,靠**和sql控制

安全性要求不是很高,並且資料量很大的時候,可以不需要外來鍵。

銀行專案,安全性要求很高的專案是用外來鍵的。

用外來鍵會降低插入資料的速度,不用外來鍵靠sql和**控制完全不影響使用。

優化SQL的幾種方式

優化的目的 1 盡量保證索引能正確使用。2 盡量避免全域性搜尋。3 索引不是越多越好。方式 1 對查詢進行優化,應盡量避免全表掃瞄,首先應考慮在 where 及 order by 涉及的列上建立索引 2 應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全...

sql優化的幾種方式

一.為什麼要進行sql優化 我們開發專案上線初期,由於業務資料量相對較少,一些sql的執行效率對程式執行效率的影響不太明顯,而開發和運維人員也無法判斷sql對程式的執行效率有多大,故很少針對sql進行專門的優化,而隨著時間的積累,業務資料量的增多,sql的執行效率對程式的執行效率的影響逐漸增大,此時...

sql優化的幾種方式

1 盡量避免全表掃瞄,應考慮在 where 及 order by 涉及的列上建立索引。2 盡量避免在where子句中使用以下查詢,會導致放棄索引全表掃瞄。3 is null 使用字段預設值代替 或 操作符 or 使用 union all 代替 in 和 not in 連續數值使用 between 代...