MySQL數(shù)據(jù)庫(kù)中對(duì)前端和后臺(tái)進(jìn)行系統(tǒng)優(yōu)化

字號(hào):

本文中介紹的系統(tǒng)優(yōu)化,主要針對(duì)前端和后臺(tái)這兩方面(后臺(tái)方面主要對(duì)SQL語(yǔ)句和數(shù)據(jù)存儲(chǔ)進(jìn)行了優(yōu)化),下文中我們將介紹一些優(yōu)化技巧和經(jīng)驗(yàn)。
    技巧:
    1. 如何查出效率低的語(yǔ)句?
    在MySQL下,在啟動(dòng)參數(shù)中設(shè)置 --log-slow-queries=[文件名],就可以在指定的日志文件中記錄執(zhí)行時(shí)間超過(guò)long_query_time(缺省為10秒)的SQL語(yǔ)句。你也可以在啟動(dòng)配置文件中修改long query的時(shí)間,如:
    # Set long query time to 8 seconds
    long_query_time=8
    2. 如何查詢某表的索引?
    可使用SHOW INDEX語(yǔ)句,如:
    SHOW INDEX FROM [表名]
    3. 如何查詢某條語(yǔ)句的索引使用情況?
    可用EXPLAIN語(yǔ)句來(lái)看一下某條SELECT語(yǔ)句的索引使用情況。如果是UPDATE或DELETE語(yǔ)句,需要先轉(zhuǎn)換為SELECT語(yǔ)句。
    4. 如何把導(dǎo)出INNODB引擎的內(nèi)容到錯(cuò)誤日志文件中?
    我們可以使用SHOW INNODB STATUS命令來(lái)查看INNODB引擎的很多有用的信息,如當(dāng)前進(jìn)程、事務(wù)、外鍵錯(cuò)誤、死鎖問(wèn)題和其它一些統(tǒng)計(jì)數(shù)據(jù)。如何讓該信息能記錄在日志文件中 呢?只要使用如下語(yǔ)句創(chuàng)建innodb_monitor表,MySQL就會(huì)每15秒鐘把該系統(tǒng)寫入到錯(cuò)誤日志文件中:
    CREATE TABLE innodb_monitor (a INT) ENGINE=INNODB;
    如果你不再需要導(dǎo)出到錯(cuò)誤日志文件,只要?jiǎng)h除該表即可:
    DROP TABLE innodb_monitor;
    5. 如何定期刪除龐大的日志文件?
    只要在啟動(dòng)配置文件中設(shè)置日志過(guò)期時(shí)間即可:
    expire_logs_days=10
    注意事項(xiàng):
    1. 重點(diǎn)關(guān)注索引
    下面以表TSK_TASK表為例說(shuō)明SQL語(yǔ)句優(yōu)化過(guò)程。TSK_TASK表用于保存系統(tǒng)監(jiān)測(cè)任務(wù),相關(guān)字段及索引如下:
    ID:主鍵;
    MON_TIME:監(jiān)測(cè)時(shí)間;建了索引;
    STATUS_ID:任務(wù)狀態(tài);與SYS_HIER_INFO.ID建立了外鍵關(guān)系。
    注MySQL自動(dòng)會(huì)為外鍵建立索引,在本次優(yōu)化過(guò)程中,發(fā)現(xiàn)這些自動(dòng)建立的外鍵索引會(huì)對(duì)SQL語(yǔ)句的效率產(chǎn)生不必要的干擾,需要特別注意!