目標:
掌握常見的優化方法
一. 如何通過慢日誌發現有問題的sql?
(1)查詢次數多且每次查詢占用時間長的sql
通過pt-query-digest分析查詢sql
(2)io比較大的sql
通過pt-query-digest分析rows examine項
(3)未命中索引的sql
通過pt-query-digest分析rows examine項和rows send對比
二.如何分析sql查詢
通過explain sql;
explain select count(*) from mmall_cart
image.png
解析結果:
table:顯示這一行的資料時關於那張表
possible_keys:顯示可能應用在這張表的索引,如果為空,沒索引。
key:實際使用的索引。
key_len:使用索引的長度,在不損壞精確性的情況下,索引的長度越短越好。
ref:顯示索引被是使用。
rows:mysqlr認為必須檢查的用來返回請求資料的行數。
using filesort:出現這個則sql需要優化。mysql需要進行額外的步驟來發現如何對返回的行排序。他根據連線誒性一級儲存排序鍵值和匹配條件的全部行的行指標來排序全部行。
using temporary:出現這個sql需要優化。mysql需要建立乙個臨時表儲存結果。這通常發生在對不同的列集進行order by上而不是group by上。
三.常見sql優化
(1)max()優化
select max(payment_date) from payment;
優化方式:建立索引
create index idx_paydate on payment (payment_date)
(2)count()優化
count(id)代替count(*),count(id)查詢不會查詢null的資料
(3) limit優化
limit常用語分頁處理,伴隨著order by從句使用會出現io問題。
select film_id,description from film order by title limit 50,5;
優化方法:
使用有索引的列或主鍵進行order by處理。
select film_id,description from film order by film_id limit 50,5;
記錄上次返回的主鍵,在下次查詢時使用主鍵過濾
select film_id,description from film where film_id>55 and film_id<60 order by film_id limit 1,5;
(4)如何選擇合適的列建立索引?
在where從句,order by從句,order by從句,on從句出現的列
索引字段越小越好
離散度大的列放到聯合索引的前面。
mysq基礎優化
skip name resolve skip locking skip innodb skip bdb key buffer 1g記憶體推薦設定為256m,2g記憶體推薦設定為512m wait timeout 3或者5 2g記憶體推薦設定為5 max connections 如果訪問量很大可以設定...
mysql安裝總結 mysq安裝總結 MySQL
2 建立mysql安裝使用者 直接檢視install binary檔案當中有建立使用者的語句。語句為groupadd mysql useradd r g mysql mysql 3 為前面解壓的目錄在 usr local 下建立乙個軟連線,並且附許可權。cd usr local ln s opt m...
mysq安裝總結
位址為 名為linux generic glibc 2.5 x86,64 bit compressed tar archive 的檔案,完成後的檔案為mysql 5.6.27 linux glibc2.5 x86 64.tar.gz。至於你是怎麼放到linux裡面就隨你了,可以用rz,或者直接在li...