《Mysql必讀MySql的優(yōu)化步驟介紹(推薦)》要點:
本文介紹了Mysql必讀MySql的優(yōu)化步驟介紹(推薦),希望對您有用。如果有疑問,可以聯(lián)系我們。
MySql優(yōu)化的一般步驟:MYSQL實例
1.通過show status 命令了解各種sql的執(zhí)行效率MYSQL實例
SHOW STATUS提供msyql服務器的狀態(tài)信息MYSQL實例
一般情況下,我們只需要了解以”Com”開頭的指令MYSQL實例
show session status like ‘Com%':顯示當前的連接的統(tǒng)計結果MYSQL實例
show global status like ‘Com%' :顯示自數據庫上次啟動至今的統(tǒng)計結果MYSQL實例
注:默認是session級別的MYSQL實例
其中Com_XXX表示XXX語句所執(zhí)行的次數.
MYSQL實例
重點注意:Com_select,Com_insert,Com_update,Com_delete通過這幾個參數,可以容易地了解到當前數據庫的應用是以插MYSQL實例
入更新為主還是以查詢操作為主,以及各類的SQL大致的執(zhí)行比例是多少.MYSQL實例
另外,還有幾個參數需要注意下:MYSQL實例
show status like ‘Connections'// 試圖連接MySQL服務器的次數MYSQL實例
show status like ‘Uptime'//服務器工作的時間(單位秒)MYSQL實例
show status like ‘Slow_queries'//慢查詢的次數 (默認是10秒中就當做是慢查詢,如下圖所示)MYSQL實例
MYSQL實例
a) 如何查詢mysql的慢查詢時間MYSQL實例
Show variables like 'long_query_time';MYSQL實例
b) 修改mysql 慢查詢時間MYSQL實例
set long_query_time=2//如果查詢時間超過2秒就算作是慢查詢MYSQL實例
2. 定位執(zhí)行效率較低的SQL語句(dql出現問題的概率較dml的大)MYSQL實例
問題是:如何在一個項目中,找到慢查詢的select語句?MYSQL實例
答案:mysql支持把慢查詢語句記錄到日志文件中.程序員需要修改php.ini的配置文件,默認情況下,慢查詢記錄是不開啟的.MYSQL實例
開啟慢查詢記錄的步驟:MYSQL實例
打開 my.ini ,找到 [mysqld] 在其下面添加MYSQL實例
long_query_time = 2MYSQL實例
log-slow-queries = D:/mysql/logs/slow.log #設置把日志寫在那里,可以為空,系統(tǒng)會給一個缺省的文件MYSQL實例
例子:我們數據表中有1千萬條的數據量MYSQL實例
DQL語句:SELECT * FROM order_copy WHERE id=12345;MYSQL實例
MYSQL實例
查詢耗時:19s>2s,所以mysql會將該條select語句記錄到慢查詢日志中MYSQL實例
SELECT * FROM order_copy WHERE id=12345的執(zhí)行時間:MYSQL實例
添加索引前:19sMYSQL實例
添加索引后:0.08sMYSQL實例
3.通過explain分析低效率的SQL語句的執(zhí)行情況MYSQL實例
使用explain分析該dql語句:MYSQL實例
EXPLAIN SELECT * FROM order_copy WHERE id=12345
MYSQL實例
會產生如下信息:
MYSQL實例
select_type:表示查詢的類型.
MYSQL實例
table:輸出結果集的表
MYSQL實例
type:表示表的連接類型(system和const為佳)
MYSQL實例
possible_keys:表示查詢時,可能使用的索引
MYSQL實例
key:表示實際使用的索引
MYSQL實例
key_len:索引字段的長度
MYSQL實例
rows:掃描的行數
MYSQL實例
Extra:執(zhí)行情況的描述和說明MYSQL實例
注意:要盡量避免讓type的結果為all,extra的結果為:using filesortMYSQL實例
MYSQL實例
4.確定問題并采取相應的優(yōu)化措施MYSQL實例
常用的優(yōu)化措施是添加索引.添加索引,我們不用加內存,不用改程序,不用調sql,只要執(zhí)行個正確的'create index',查詢速度就可能提高百倍千倍.但是天下沒有免費的午餐,查詢速度的提高是以插入、更新、刪除的速度為代價的,這些寫操作,增加了大量的I/O.MYSQL實例
例如:給字段id添加索引:MYSQL實例
ALTER TABLE order_copy ADD PRIMARY KEY(id)MYSQL實例
給1千萬的數據添加primary key 需要耗時: 428秒(7分鐘)MYSQL實例
EXPLAIN SELECT * FROM order_copy WHERE id=12345MYSQL實例
MYSQL實例
正是因為給id添加了索引,才使得rows的結果為1MYSQL實例
但是索引并不是可以隨便添加的,以下幾種情況需牢記在心:MYSQL實例
較頻繁的作為查詢條件字段應該創(chuàng)建索引MYSQL實例
select * from order_copy where id = $idMYSQL實例
唯一性太差的字段不適合單獨創(chuàng)建索引,即使頻繁作為查詢條件MYSQL實例
select * from order_copy where sex='女'MYSQL實例
更新非常頻繁的字段不適合創(chuàng)建索引MYSQL實例
select * from order_copy where order_state='未付款'MYSQL實例
不會出現在WHERE子句中字段不該創(chuàng)建索引MYSQL實例
索引的類型:MYSQL實例
PRIMARY 索引 => 在主鍵上自動創(chuàng)建INDEX 索引 => 就是普通索引UNIQUE 索引 => 相當于INDEX + UniqueFULLTEXT => 只在MYISAM 存儲引擎支持, 目的是全文索引,在內容系統(tǒng)中用的多, 在全英文網站用多(英文詞獨立). 中文數據不常用,意義不大 國內全文索引通常 使用 sphinx 來完成.MYSQL實例
索引的使用MYSQL實例
建立索引 create [UNIQUE|FULLTEXT] index index_name on tbl_name (col_name [(length)] [ASC | DESC] , …..);
alter table table_name ADD INDEX [index_name] (index_col_name,...)MYSQL實例
添加主鍵(索引) ALTER TABLE 表名 ADD PRIMARY KEY(列名,..); 聯(lián)合主鍵MYSQL實例
刪除索引 DROP INDEX index_name ON tbl_name;
alter table table_name drop index index_name;刪除主鍵(索引)比較特別: alter table t_b drop primary key;查詢索引(均可) show index from table_name;
show keys from table_name;
desc table_Name;MYSQL實例
以上就是小編為大家?guī)淼腗ySql的優(yōu)化步驟介紹(推薦)全部內容了,希望大家多多支持維易PHP~MYSQL實例
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/3572.html