MySQL是世界上實(shí)際最流行的數(shù)據(jù)庫(kù)管理系統(tǒng),是遍布全球編程社區(qū)的首選。它有一個(gè)系列有趣的特性,在很多方面都很擅長(zhǎng)。由于其巨大的人氣,在網(wǎng)上可以找到許多MySQL的使用技巧。這里有12個(gè)最好的技巧和竅門(mén),所有MySQL數(shù)據(jù)庫(kù)開(kāi)發(fā)者都應(yīng)該了解一下。
1、避免編輯轉(zhuǎn)儲(chǔ)文件
Mysqldump創(chuàng)建的轉(zhuǎn)儲(chǔ)文件原本是無(wú)害的,但它很容易被嘗試去編輯。然而,人們應(yīng)該知道在任何情況下的試圖修改這些文件被證明是有危險(xiǎn)的。直觀地看對(duì)這些文件的改動(dòng)會(huì)導(dǎo)致數(shù)據(jù)庫(kù)損壞,從而導(dǎo)致系統(tǒng)的退化。為了讓你的系統(tǒng)免受任何麻煩,你必須避免編輯MySQL轉(zhuǎn)儲(chǔ)文件。
2、MyISAM 塊大小
大多數(shù)開(kāi)發(fā)者忘記了這一事實(shí),文件系統(tǒng)往往需要一個(gè)大的MyISAM塊以保證高效運(yùn)行。許多開(kāi)發(fā)者不知道塊大小的設(shè)置。.MYI文件存儲(chǔ)在myisam_block_size的設(shè)置里,這個(gè)設(shè)置項(xiàng)可用來(lái)修改大的塊尺寸。MyISAM塊大小的默認(rèn)值是1K,這不是當(dāng)前大多數(shù)系統(tǒng)的恰當(dāng)設(shè)置。因此,開(kāi)發(fā)者應(yīng)該考慮指定一個(gè)與之相適應(yīng)的值。
3、打開(kāi) Delay_Key_Write
為避免系統(tǒng)崩潰時(shí)數(shù)據(jù)庫(kù)損壞delay_key_write默認(rèn)是關(guān)閉的。有人可能會(huì)問(wèn),如果是這樣的話,為什么要把它放在首位打開(kāi)呢?從防止數(shù)據(jù)庫(kù)每次寫(xiě)MyISAM文件時(shí)刷新密鑰文件方面看這是必要的。通過(guò)把它打開(kāi),開(kāi)發(fā)者可以節(jié)省很多時(shí)間。參考MySQL官方手冊(cè)了解你的版本如何把它打開(kāi)。
4、Joins(表連接)
創(chuàng)建索引和使用相同的列類(lèi)型:join(表連接)操作可以在Mysql中被優(yōu)化。若應(yīng)用中有許多join操作,可以通過(guò)創(chuàng)建相同的列類(lèi)型上join來(lái)優(yōu)化。創(chuàng)建索引是加速應(yīng)用的另一種方法。查詢(xún)修改有助于你找回期望的查詢(xún)結(jié)果。
5、優(yōu)化WHERE從句
即使你只搜索一行MySQL也會(huì)查詢(xún)整個(gè)表,因此,建議你當(dāng)只需要一條結(jié)果時(shí)將limit設(shè)置為1。通過(guò)這樣做,可以避免系統(tǒng)貫穿搜索整個(gè)表,從而可以盡可能快找到與你需求相匹配的記錄。
6、在Select查詢(xún)上使用Explain關(guān)鍵字
你肯定希望得到與任何特定查詢(xún)相關(guān)的一些幫助。Explain關(guān)鍵詞在這方面是非常有幫助的。它在你尋求查詢(xún)到底做了什么時(shí)提供了具體細(xì)節(jié)。例如,在復(fù)雜join查詢(xún)前鍵入Explain關(guān)鍵詞你會(huì)得到很多有用的資料。
7、使用查詢(xún)緩存優(yōu)化查詢(xún)
MySQL的查詢(xún)緩存是默認(rèn)啟用的。這主要是因?yàn)榫彺嬗兄诓樵?xún)的快速執(zhí)行,緩存可以在相同的查詢(xún)多次運(yùn)行使用。你在關(guān)鍵字前加入當(dāng)前日期、CURRDATE等PHP代碼使查詢(xún)緩存它從而啟用此功能。
8、使用堆棧跟蹤隔離Bug
各種Bug可以使用stack_trace隔離出來(lái)。一個(gè)空指針足以毀掉一段特定的代碼,任何開(kāi)發(fā)人員都知道它有這樣的能力。了解使用堆棧跟蹤的細(xì)節(jié),從而在你的代碼里避免bug。
9、設(shè)置SQL_MODE
枚舉類(lèi)型總是讓人感到非常的疑惑。由于字段可能擁有多個(gè)可能的值,這些可能的值包括你指定的和null,在編碼時(shí)將會(huì)出現(xiàn)很多問(wèn)題,你將永遠(yuǎn)都會(huì)得到一個(gè)警告說(shuō)代碼不正確。一個(gè)簡(jiǎn)單的解決辦法就是設(shè)置SQL_MODE。
//Start mysqld with
$–sql-mode=”modes”
//or
$sql-mode=”modes” (my.ini – Windows / my.cnf – Unix)
//Change at runtime, separate multiple modes with a comma
$set [GLOBAL|SESSION] sql_mode=’modes’
//TRADITIONAL is equivalent to the following modes:
STRICT_TRANS_TABLES, STRICT_ALL_TABLES, NO_ZERO_IN_DATE, ERROR_FOR_DIVISION_BY_ZERO, and NO_AUTO_CREATE_USER
10、修改Root密碼
修改root密碼對(duì)于某些特定設(shè)置是必不可少的,修改命令如下:
//Straightforward MySQL 101
$mysqladmin -u root password [Type in selected password]
//Changing users ROOT password
$mysqladmin -u root -p [type old password] newpass [hit enter and type new password. Press enter]
//Use mysql sql command
$mysql -u root -p
//prompt “mysql>” pops up. Enter:
$use mysql;
//Enter user name you want to change password for
$update user set password=PASSWORD (Type new Password Here) where User = ‘username’;
//Don’t forget the previous semicolon, now reload the settings for the users privileges
$flush privileges;
$quit
11、用MySQL Dump 命令備份數(shù)據(jù)庫(kù)
開(kāi)發(fā)者都知道數(shù)據(jù)庫(kù)備份的重要性,當(dāng)系統(tǒng)出現(xiàn)重大故障時(shí)能夠起到救命的作用。
最簡(jiǎn)單的備份數(shù)據(jù)庫(kù)的方法
$mysqldump –user [user name] –password=[password] [database name] > [dump file]
//你也可以用簡(jiǎn)寫(xiě)"-u","-p"來(lái)分別代替"user"和"password"
//將多個(gè)數(shù)據(jù)庫(kù)導(dǎo)入到一個(gè)文件只要在后面添加需要導(dǎo)出數(shù)據(jù)庫(kù)的名稱(chēng):
mysqldump –user [user name] –password=[password]
[first database name] [second database name] > [dump file]
//許多數(shù)據(jù)庫(kù)都提供了順序備份的功能,要備份所有數(shù)據(jù)庫(kù)只需要添加--all-databases參數(shù)。如果你不喜歡命令行,從Sourceforge上下載automysqlbackup吧。
12、調(diào)整CONFIG的配置
PERL腳本MySQL Tuner是另一個(gè)強(qiáng)大的優(yōu)化數(shù)據(jù)庫(kù)性能的工具,它能夠幫助你對(duì)MySQL配置來(lái)進(jìn)行多處調(diào)整和修改。你可以訪問(wèn)該項(xiàng)目的官網(wǎng)來(lái)進(jìn)一步了解它。
英文原文:10+ Useful Tricks Every MySQL Database Developer Must Consider