日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

MySql優(yōu)化指南_MySQL教程

編輯Tag賺U幣

推薦:MySQL為什么會索引失效?
索引并不是時時都會生效的,比如以下幾種情況,將導致索引失效: 如果條件中有or,即使其中有條件帶索引也不會使用(這也是為什么盡量少用or的原因) 注意:要想使用or,又想讓索引生效,只能將or條件中的每個列都加上索引 2.對于多列索引,不是使用的第一部分,則不會使

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

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

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

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

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

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

  注:默認是session級別的

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

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

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

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

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

  

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

    Show variables like 'long_query_time';

  b) 修改mysql 慢查詢時間

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

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

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

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

  開啟慢查詢記錄的步驟:

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

  long_query_time = 2

  log-slow-queries = D:/mysql/logs/slow.log #設置把日志寫在那里,可以為空,系統(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:輸出結果集的表
type:表示表的連接類型(system和const為佳)
possible_keys:表示查詢時,可能使用的索引
key:表示實際使用的索引
key_len:索引字段的長度
rows:掃描的行數(shù)
Extra:執(zhí)行情況的描述和說明

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

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

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

ALTER TABLE order_copy ADD PRIMARY KEY(id)

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

EXPLAIN SELECT * FROM order_copy WHERE id=12345

正是因為給id添加了索引,才使得rows的結果為1

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

    select * from order_copy where id = $id

   select * from order_copy where sex=’女’

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

索引的類型:

索引的使用

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


分享:MySql大批量導入數(shù)據(jù)優(yōu)化
對于MyISAM: a.alter table table_name disable keys b.loading data c.alter table table_name enable keys 對于Innodb: a.將要導入的數(shù)據(jù)按照主鍵排序 b.set unique_checks=0,關閉唯一性校驗 c.set autocommit=0,關閉自動提交

來源:未知//所屬分類:MySQL教程/更新時間:2012-10-22
相關MySQL教程