(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 代...