日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MySql的优化步骤

發(fā)布時間:2025/4/16 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySql的优化步骤 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

MySql優(yōu)化的一般步驟:

1.通過show status 命令了解各種sql的執(zhí)行效率

  SHOW STATUS提供msyql服務(wù)器的狀態(tài)信息

  一般情況下,我們只需要了解以”Com”開頭的指令

  show session status like ‘Com%’:顯示當(dāng)前的連接的統(tǒng)計(jì)結(jié)果

  show global status like ‘Com%’ :顯示自數(shù)據(jù)庫上次啟動至今的統(tǒng)計(jì)結(jié)果

  注:默認(rèn)是session級別的

  其中Com_XXX表示XXX語句所執(zhí)行的次數(shù)。
重點(diǎn)注意:Com_select,Com_insert,Com_update,Com_delete通過這幾個參數(shù),可以容易地了解到當(dāng)前數(shù)據(jù)庫的應(yīng)用是以插入更新為主還是以查詢操作為主,以及各類的SQL大致的執(zhí)行比例是多少。

  另外,還有幾個參數(shù)需要注意下:

  show status like ‘Connections’// 試圖連接MySQL服務(wù)器的次數(shù)

  show status like ‘Uptime’//服務(wù)器工作的時間(單位秒)

  show status like ‘Slow_queries’//慢查詢的次數(shù) (默認(rèn)是10秒中就當(dāng)做是慢查詢,如下圖所示)

  

  a) 如何查詢mysql的慢查詢時間

    Show variables like 'long_query_time';

  b) 修改mysql 慢查詢時間

    set long_query_time=2//如果查詢時間超過2秒就算作是慢查詢

2.?定位執(zhí)行效率較低的SQL語句(dql出現(xiàn)問題的概率較dml的大)

  問題是:如何在一個項(xiàng)目中,找到慢查詢的select語句?

  答案:mysql支持把慢查詢語句記錄到日志文件中。程序員需要修改php.ini的配置文件,默認(rèn)情況下,慢查詢記錄是不開啟的。

  開啟慢查詢記錄的步驟:

  打開 my.ini ,找到 [mysqld] 在其下面添加

  long_query_time = 2

  log-slow-queries = D:/mysql/logs/slow.log #設(shè)置把日志寫在那里,可以為空,系統(tǒng)會給一個缺省的文件

? ? ?例子:我們數(shù)據(jù)表中有1千萬條的數(shù)據(jù)量

  DQL語句:SELECT * FROM order_copy WHERE id=12345;

  

  查詢耗時:19s>2s,所以mysql會將該條select語句記錄到慢查詢?nèi)罩局?/p>

  SELECT * FROM order_copy WHERE id=12345的執(zhí)行時間:

  添加索引前:19s

  添加索引后:0.08s

3.通過explain分析低效率的SQL語句的執(zhí)行情況

  使用explain分析該dql語句:

EXPLAIN SELECT * FROM order_copy WHERE id=12345
會產(chǎn)生如下信息:
select_type:表示查詢的類型。
table:輸出結(jié)果集的表
type:表示表的連接類型(system和const為佳)
possible_keys:表示查詢時,可能使用的索引
key:表示實(shí)際使用的索引
key_len:索引字段的長度
rows:掃描的行數(shù)
Extra:執(zhí)行情況的描述和說明

注意:要盡量避免讓type的結(jié)果為all,extra的結(jié)果為:using filesort

4.確定問題并采取相應(yīng)的優(yōu)化措施

  • 常用的優(yōu)化措施是添加索引。添加索引,我們不用加內(nèi)存,不用改程序,不用調(diào)sql,只要執(zhí)行個正確的’create index’,查詢速度就可能提高百倍千倍。但是天下沒有免費(fèi)的午餐,查詢速度的提高是以插入、更新、刪除的速度為代價的,這些寫操作,增加了大量的I/O。

例如:給字段id添加索引:

ALTER TABLE order_copy ADD PRIMARY KEY(id)

給1千萬的數(shù)據(jù)添加primary key 需要耗時: 428秒(7分鐘)

EXPLAIN SELECT * FROM order_copy WHERE id=12345

正是因?yàn)榻oid添加了索引,才使得rows的結(jié)果為1

但是索引并不是可以隨便添加的,以下幾種情況需牢記在心:

  • 較頻繁的作為查詢條件字段應(yīng)該創(chuàng)建索引

   ?select * from order_copy where id = $id

  • 唯一性太差的字段不適合單獨(dú)創(chuàng)建索引,即使頻繁作為查詢條件

  ?select * from order_copy where sex=’女’

  • 更新非常頻繁的字段不適合創(chuàng)建索引

   ?select * from order_copy where order_state=’未付款’

  • 不會出現(xiàn)在WHERE子句中字段不該創(chuàng)建索引

索引的類型:

  • PRIMARY 索引????? => 在主鍵上自動創(chuàng)建
  • INDEX 索引????????? => 就是普通索引
  • UNIQUE 索引??????? => 相當(dāng)于INDEX + Unique
  • FULLTEXT ?????????? => 只在MYISAM 存儲引擎支持, 目的是全文索引,在內(nèi)容系統(tǒng)中用的多, 在全英文網(wǎng)站用多(英文詞獨(dú)立). 中文數(shù)據(jù)不常用,意義不大 國內(nèi)全文索引通常 使用 sphinx 來完成.

索引的使用

  • 建立索引 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,...)

   ?添加主鍵(索引) ALTER TABLE 表名 ADD PRIMARY KEY(列名,..); 聯(lián)合主鍵

  • 刪除索引 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;

相關(guān)資料:

explain的使用:http://www.cnblogs.com/you-yang/archive/2012/01/18/2325841.html

轉(zhuǎn)載請注明出處:http://www.cnblogs.com/hongfei/archive/2012/10/20/2732516.html

轉(zhuǎn)載于:https://www.cnblogs.com/hongfei/archive/2012/10/20/2732516.html

總結(jié)

以上是生活随笔為你收集整理的MySql的优化步骤的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。