MySql調(diào)優(yōu)初探

1.查詢MySql系統(tǒng)變量:SHOW VARIABLES LIKE '%quer%';

1.png

2.查詢慢查詢數(shù)量: SHOW STATUS LIKE '%slow_queries%';

3.開啟慢日志: SET GLOBAL slow_query_log = ON;

開啟后通過 1步驟中的語句再次查詢可以看到 slow_query_log已經(jīng)是 on

2.png

slow_query_log_file 可以找到慢日志文件的位置;

4.默認(rèn)慢查詢的時(shí)間為10s,改變慢查詢時(shí)間定義: SET GLOBAL long_query_time = 1;

5.如果有慢sql,可以通過慢日志定位sql,然后通過explain xxsql 來定位

index指的走了索引 ,all 指的該sql都是全表掃描,需要優(yōu)化,更多的參數(shù)意義,若有興趣,可以自行百度。

常見的優(yōu)化就是分析慢sql,合理創(chuàng)建索引,下面是一些常用到的。

1)創(chuàng)建索引

索引的創(chuàng)建可以在CREATE TABLE語句中進(jìn)行,也可以單獨(dú)用CREATE INDEX或ALTER TABLE來給表增加索引。以下命令語句分別提示了如何創(chuàng)建主鍵索引(PRIMARY KEY),聯(lián)合索引(UNIQUE)和普通索引(INDEX)的方法。

mysql>ALTER TABLE `table_name` ADD INDEX `index_name` (column list);

mysql>ALTER TABLE `table_name` ADD UNIQUE `index_name` (column list);

mysql>ALTER TABLE `table_name` ADD PRIMARY KEY `index_name` (column list);

mysql>CREATE INDEX `index_name` ON `table_name` (column_list);

mysql>CREATE UNIQUE INDEX `index_name` ON `table_name` (column_list);

mysql>ALTER TABLE `article` ADD INDEX (`id`,`order_id`);給article表增加id索引,order_id索引

mysql>ALTER TABLE `article` ADD INDEX `id`;//給article表增加id索引

2)重建索引

重建索引在常規(guī)的數(shù)據(jù)庫維護(hù)操作中經(jīng)常使用。在數(shù)據(jù)庫運(yùn)行了較長(zhǎng)時(shí)間后,索引都有損壞的可能,這時(shí)就需要重建。對(duì)數(shù)據(jù)重建索引可以起到提高檢索效率。

mysql> REPAIR TABLE `table_name` QUICK;

3)查詢數(shù)據(jù)庫索引

mysql> SHOW INDEX FROM `table_name`; 

4)刪除索引

刪除索引可以使用ALTER TABLE或DROP INDEX語句來實(shí)現(xiàn)。DROP INDEX可以在ALTER TABLE內(nèi)部作為一條語句處理,其格式如下:

mysql>DROP index `index_name` ON `table_name` (column list);

mysql>ALTER TABLE `table_name` DROP INDEX `index_name` (column list);

mysql>ALTER TABLE `table_name` DROP UNIQUE `index_name` (column list);

mysql>ALTER TABLE `table_name` DROP PRIMARY KEY `index_name` (column list);

在前面的三條語句中,都刪除了table_name中的索引index_name。而在最后一條語句中,只在刪除PRIMARY KEY索引中使用,因?yàn)橐粋€(gè)表只可能有一個(gè)PRIMARY KEY索引,因此也可不指定索引名。如果沒有創(chuàng)建PRIMARY KEY索引,但表具有一個(gè)或多個(gè)UNIQUE索引,則MySQL將刪除第一個(gè)UNIQUE索引。如果從表中刪除某列,則索引會(huì)受影響。對(duì)于多列組合的索引,如果刪除其中的某列,則該列也會(huì)從索引中刪除。如果刪除組成索引的所有列,則整個(gè)索引將被刪除。

5)強(qiáng)制使用索引

mysql>SELECT * FROM TABLE1 FORCE INDEX (索引名或PRIMARY) ;

6)聯(lián)合索引

mysql>alter table test add key id_a_b(a,b) ;

6.1)聯(lián)合索引的最左匹配原則:

對(duì)于聯(lián)合索引當(dāng)條件為 a=1 and b=1 則使用索引 ,當(dāng)a=1 時(shí)也使用索引 當(dāng)單獨(dú)使用b=1時(shí)則不使用索引。

MySql會(huì)一直向右匹配直到遇到范圍查詢(>、<、between、like)就停止匹配,比如 a=3 and b=4 and c > 5 and d = 6 如果建立(a,b,c,d)順序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引,則都可以用到,a,b,d的順序可以任意調(diào)整。

6.2) = 和 in 可以亂序,比如 a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意亂 序,mysql優(yōu)化器會(huì)幫你優(yōu)化成索引可以識(shí)別的形式。

6.3)聯(lián)合索引的最左匹配原則的成因

mysql創(chuàng)建復(fù)合索引的規(guī)則是首先會(huì)對(duì)復(fù)合索引的最左邊,也就是索引中的第一個(gè)字段進(jìn)行排序,在第一個(gè)字段排序的基礎(chǔ)上,在對(duì)索引上第二個(gè)字段進(jìn)行排序,其實(shí)就像是實(shí)現(xiàn)類似order by 字段1,字段2這樣的排序規(guī)則,那么第一個(gè)字段是絕對(duì)有序的,而第二個(gè)字段就是無序的了,因此一般情況下直接只用第二個(gè)字段判斷是用不到索引的,這就是為什么mysql要強(qiáng)調(diào)聯(lián)合索引最左匹配原則的原因。

優(yōu)化需謹(jǐn)慎,對(duì)于索引也不是越多越好,下面是關(guān)于索引過多的弊端:

  • 數(shù)據(jù)量小的表不需要建立索引,建立會(huì)增加額外的索引開銷
  • 數(shù)據(jù)變更需要維護(hù)索引,意味著更多的索引意味著更多的維護(hù)成本
  • 更多的索引也需要跟多的存儲(chǔ)空間

小結(jié):

在平時(shí)項(xiàng)目中遇到慢sql,學(xué)會(huì)分析慢sql,對(duì)于特別耗時(shí)的需要通過建立合理的索引,遇到表結(jié)構(gòu)不合理的,合理結(jié)合項(xiàng)目進(jìn)行改造,約在前期注意這些問題,后期會(huì)在維護(hù)方面省不少事。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • MYSQL 基礎(chǔ)知識(shí) 1 MySQL數(shù)據(jù)庫概要 2 簡(jiǎn)單MySQL環(huán)境 3 數(shù)據(jù)的存儲(chǔ)和獲取 4 MySQL基本操...
    Kingtester閱讀 8,056評(píng)論 5 115
  • 轉(zhuǎn) # https://www.cnblogs.com/easypass/archive/2010/12/ 08/...
    呂品?閱讀 10,118評(píng)論 0 44
  • 一、MySQL優(yōu)化 MySQL優(yōu)化從哪些方面入手: (1)存儲(chǔ)層(數(shù)據(jù)) 構(gòu)建良好的數(shù)據(jù)結(jié)構(gòu)??梢源蟠蟮奶嵘覀僑...
    寵辱不驚丶?xì)q月靜好閱讀 2,651評(píng)論 1 8
  • 今天看到一位朋友寫的mysql筆記總結(jié),覺得寫的很詳細(xì)很用心,這里轉(zhuǎn)載一下,供大家參考下,也希望大家能關(guān)注他原文地...
    信仰與初衷閱讀 4,826評(píng)論 0 30
  • 我是個(gè)愛錢又?jǐn)€不住錢的保守主義者。 從大學(xué)兼職賺到第一筆錢一直到一年前,我始終堅(jiān)信錢存銀行才是最保險(xiǎn)的,無論基金、...
    不辣的媽閱讀 265評(píng)論 0 0

友情鏈接更多精彩內(nèi)容