possible_keys:表示查詢時,可能使用的索引
key:表示實際使用的索引
key_len:索引欄位的長度,在組合索引中判斷索引被使用的情況尤為重要
ref:列與索引的比較
rows:掃瞄出的行數
filtered:按表條件過濾的行百分比
extra:執**況的描述與說明
關於索引的劃分
雜湊索引 :通過hash值來維護索引,理論上在衝突較小(即重複資料少)的情況下,效率要比普通索引高很多。(使用頻率很小,僅做了解)
alert table
addindex
using
hash
(coulmn)
組合索引:
alert table
addindex
(column1,column2)
覆蓋索引 (由於mysql自帶sql優化的能力,對於索引也是擇優選擇,因此一般不會去考慮使用覆蓋索引(除非你是資料庫大牛),僅做了解):需要查詢的所有欄位及條件中的字段都可以從索引中找到。換句話說就是查詢的列和條件被使用的索引覆蓋了。
針對索引進行優化:
select
*from
table
where id >=
(select id from
table
order
by id limit
1000000,1
)limit
30
select
*from
table
as t1 join
(select id from
table
order
by id desc
limit
(($page-1)
*$pagesize),1
as t2 where t1.id <= t2.id order
by t1.id desc
limit $pagesize
4、盡量避免在where子句中對字段進行is null值判斷,否則將導致引擎放棄使用索引而進行全表掃瞄。
select id from
table
where num is
null
設定欄位時,盡量不要使用null填充字段,因為null同樣占用空間。如:char(100)型,在字段建立時空間就固定了,不管是否插入值(null也包含在內),都是占用 100 個字元的空間,但varchar欄位中,null不占用空間。
5、盡量避免在where子句中使用!= 或 < >操作符,否則將導致引擎放棄使用索引而進行全表查詢
6、盡量避免在where子句中使用or來連線條件,如果乙個欄位有索引,乙個字段沒有索引,將導致引擎放棄使用索引而進行全表掃瞄,如:
select id from
table
where num=
5or name=
'miger'
可以修改語句,通過使用union或union all(包含重複項)來拼接兩個查詢結果:
select id from
table
where num=
5union
allselect id from
table
where name=
'miger'
7、關於in和exists,需要考慮要查詢的兩張表的大小關係。
也可以嘗試使用exists代替in:
select num from a where num in
(select num from b)
替換成:
select num from a where
exists
(select
1from b where num=a.num)
這裡可以注意到我使用的是 1 而不是 ,select 1 from table / select * from table 在用法上大同小異,都是檢視表中是否有記錄,select 1 from table 中的 1 是一常量,查到的所有行的值都是它。但從效率講 1>,因為不用查字典表。
8、在使用關鍵字like進行模糊查詢時,盡量避免第乙個字元就是%的情況出現 如:『%***%』、%***,會使引擎放棄使用索引而進行全表掃瞄,如:
select id from
table
where name like
'%世俗%'
只要第乙個字元不是%,查詢時都會使用索引。
9、盡量避免在where子句中對字段使用函式或觸發器。
10、查詢是否會產生臨時表,臨時表的資料量是不是很大。
11、當無條件時,查詢表中的精確資料,count(*)比count(column)效率高
12、關聯查詢需要explain檢視查詢順序,通常情況下mysql會用資料最少的一張表作為第一順序查詢,此時把索引建在第二張表的查詢比較高效
13、當遇到多張表關聯查詢時,mysql的優化方式是把查詢次數最少的那張表作為最外層查詢的表,優先使用那張表的索引。我們也可以通過hint命令指定表的查詢順序,將join換成straight_join來指定表的執行順序。
14、當關聯(join、left join等)多表查詢多個資料時,可以考慮拆分成兩個查詢,乙個查詢作為原來查詢的列和查詢的條件,另乙個查詢做乙個列的查詢並做第乙個查詢的過濾條件。根據阿里的開發規範手冊建立,關聯的表最多不要超過3張表。
15、盡量使用union all而非union,使用union時,將條件寫在子查詢中。
針對表結構設計優化
需要關注的問題:
limit的用法和分頁查詢優化
這個建議挑著看吧。
sql 優化注意事項
1.儲存過程比sql語句效率高 儲存過程經過預編譯處理 而sql查詢沒有 2.給表建立索引的字段 常見字段是where 後的條件字段 3.查詢表時使用 nolock 查詢語句不會阻塞 4.不要使用 select from dbo.table 用具體的字段列表代替 不要返回用不到的任何字段。同時避免使...
Feign效能優化注意事項
參考 一 feignclient註解 feignclient註解被 target elementtype.type 修飾,表示feignclient註解的作用目標在介面上 1 2 3 4 5 feignclient name github client url configuration githu...
Feign效能優化注意事項
一 feignclient註解 feignclient註解被 target elementtype.type 修飾,表示feignclient註解的作用目標在介面上 feignclient name github client url configuration githubexampleconfi...