在正常的企業應用中,乙個好的資料庫架構需要多方面的把握和優化:可以從選擇硬體方面提公升磁碟i/o、可以通過主從複製或負載均衡等策略對資料庫訪問進行分流、可以通過優化資料庫物件(欄位的選擇以及字段長度的設定優化資料庫空間)、可以通過應用優化減少與資料庫的互動(一次查詢出所需的字段資訊、建立連線池等),然而對於程式設計師來說最常用到的資料庫優化策略就是我們的sql優化,接下我將以mysql為例學習經典的sql優化策略:
一、利用資料庫提供的函式解決需求問題:
1、巧用rand()進行隨機取樣:
例句:隨機從lender表中獲取50條資料
sql語句:
select * from lender order by rand() limit 50
2、在使用group by進行分組聚合資訊的檢索的時候,可以加上with rollup字句進行整體聚合資訊的檢索:
sql語句:
select count(1),regist_distrub_type from lender group by regist_distrub_type with rollup
點評:這樣在最後就會顯示出一行資料對分銷商使用者的總數進行彙總。
3、利用case when ... then ... else ... end流程語句進行條件控制
例句:統計lender表中的分銷商使用者的數量,如果為空缺省來自"caikr"
sql語句:
select
count(1),
case when regist_distrub_type is null then 'caikr' else regist_distrub_type end
from
lender
group by
regist_distrub_type
4、當乙個表中的資料過大時,如果要對該資料表中的某些資料進行統計,可以建立中間表,中間表中資料結構和主表中的資料結構一致,這是將所有統計的資料從主表插入中間表中,這樣可以可以不和正常的業務進行互動共同操作一張表,而且也可以從中間表中增加索引等操作提公升統計效率。
二、sql優化:
對於影響新能的sql語句,我們應該如何進行系統的分析,定位sql的問題並進行解決?
1、利用explain + sql語句 分析低效sql的執行計畫,得到以下資訊:
select_type:表示select的型別,常見的有******(簡單表,即不使用表鏈結或子查詢)、primary(主查詢、即外層的查詢)、union(union中的第二個或者後面的查詢語句)、subquery(子查詢中的第乙個select)
table:輸出結果集的表
type:表示表的連線型別,主要檢查效能,其中效能由好到差的連線型別為
system(表中僅有一行,即常量表)、
const(表中最多有乙個匹配行,例如primary key或者unique index作為條件查詢)、
eq_ref(簡單來說就是多表連線中使用外來鍵或者unique index)、
ref(與eq_ref相同,只不過使用的是普通的索引)、index_merge(索引合併優化)、
unique_subquery(in 的後面是乙個查詢主鍵欄位的子查詢)、
index_subquery(作用和unique_subquery相同,區別在於in後面是查詢非唯一索引的子查詢)、
range(單錶中的範圍查詢)、
index(對於前面的每一行,都通過索引來得到資料)、
all(對於前面的每一行,都是通過全表掃瞄得到資料)
possible_keys:表示查詢時,可能使用的索引。
key:表示實際查詢中使用的索引
key_len:索引欄位的長度
rows:掃瞄行的數量
extra:執**況的說明和描述.
點評:根據上面的正規化就能定位問題並採取相應的優化措施,該加索引的加索引,該調整sql語句的調整sql語句。
資料庫查詢優化問題筆記
首先,介紹三種聯接方式,合併聯接 merge join 雜湊聯接 hash join 和巢狀迴圈聯接 nested loop join 合併聯接 把問題拆分為小問題,通過解決小問題來解決最初的問題,分為兩步 拆分階段,將序列分為更小的序列 排序階段,把小的序列合在一起 使用合併演算法 來構成更大的序...
資料庫查詢優化
方法 1 1.對查詢進行優化,應盡量避免全表掃瞄,首先應考慮在 where 及 order by 涉及的列上建立索引。步驟閱讀 22.應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃瞄,如 select id from t where num is...
資料庫查詢優化
本記載,用於保留面對大資料量時,查詢速率待優化,只記錄要點,具體如何操作,還需查詢 1 索引優化 通過建立合理高效的索引,提高查詢的速度.2 sql優化 根據需求,組織優化sql語句,使查詢效率達到最優,在很多情況下要考慮索引的作用 3 水平拆分 如果表的資料量增長特變塊,索引帶來的效能優化可能達到...