《Mysql必讀有關(guān)mysql優(yōu)化的一些東東整理》要點(diǎn):
本文介紹了Mysql必讀有關(guān)mysql優(yōu)化的一些東東整理,希望對(duì)您有用。如果有疑問,可以聯(lián)系我們。
MYSQL學(xué)習(xí)1.查詢幫助 ? contents
2.使用合成的散列值,分離BLOB或者TEXT
3.貨幣使用定點(diǎn)數(shù)(decimal或者numberic)
4.sql_mode?
5.order by rand() limit 1000;
6.優(yōu)化show status like 'Com' Com_select Com_insert等查看插入多還是查詢多
7.Handler_read_key 的值將很高,這個(gè)值代表了一個(gè)行被索引值讀的次數(shù),很低的值表明增加索引得到的性能改善不高,因?yàn)樗饕⒉唤?jīng)常使用.Handler_read_rnd_next 的值高則意味著查詢運(yùn)行低效,并且應(yīng)該建立索引補(bǔ)救.這個(gè)值的含義是在數(shù)據(jù)文件中讀下一行的請(qǐng)求數(shù).如果你正進(jìn)行大量的表掃描,該值較高.通常說明表索引不正確或?qū)懭氲牟樵儧]有利用索引.
8.定期分析表?? ANALYZE TABLE?? CHECK TABLE??? CHECKSUM TABLE
9.優(yōu)化表 OPTIMIZE TABLE
10.導(dǎo)入大數(shù)據(jù):Myisam? ALTER TABLE tblname DISABLE KEYS??? loading the data??? ALTER TABLE tblname ENABLE KEYS;
Innodb? SET UNIQUE_CHECKS=0???? SET AUTOCOMMIT=0
11.優(yōu)化insert:LOAD DATA INFILE??? replace?? ignore
12.優(yōu)化group by???? ORDER BY NULL
13.show status like 'Table%';?????????????? show status like 'innodb_row_lock%';
14.CREATE TABLE innodb_monitor(a INT) ENGINE=INNODB;
15.影響Mysql 性能的重要參數(shù):
key_buffer_size :? 說明:鍵緩存(變量key_buffer_size) 被所有線程共享;服務(wù)器使用的其它緩存則根據(jù)需要分配.此參數(shù)只適用于myisam 存儲(chǔ)引擎.
table_cache:數(shù)據(jù)庫中打開表的緩存數(shù)量.table_cache 與max_connections 有關(guān).例如,對(duì)于200 個(gè)并行運(yùn)行的連接,應(yīng)該讓表的緩至少有200 * N,這里N 是可以執(zhí)行的查詢的一個(gè)聯(lián)接中表的最大數(shù)量.還需要為臨時(shí)表和文件保留一些額外的文件描述符.
innodb_buffer_pool_size:緩存InnoDB 數(shù)據(jù)和索引的內(nèi)存緩沖區(qū)的大小.你把這個(gè)值設(shè)得越高,訪問表中數(shù)據(jù)需要得磁盤I/O 越少.
MYSQL學(xué)習(xí)innodb_flush_log_at_trx_commit:0|1|2
innodb_additional_mem_pool_size:1M
innodb_table_locks:0|1
innodb_lock_wait_timeout:
innodb_support_xa:通過該參數(shù)設(shè)置是否支持分布式事務(wù),默認(rèn)值是ON 或者1,表示支持分布式事務(wù).如果確認(rèn)應(yīng)用中不需要使用分布式事務(wù),則可以關(guān)閉這個(gè)參數(shù),減少磁盤刷新的次數(shù)并獲得更好的InnoDB 性能.
innodb_doublewrite:
innodb_log_buffer_size:
innodb_log_file_size:
MYSQL學(xué)習(xí)1.數(shù)據(jù)庫的設(shè)計(jì)
盡量把數(shù)據(jù)庫設(shè)計(jì)的更小的占磁盤空間.
1).盡可能使用更小的整數(shù)類型.(mediumint就比int更合適).
2).盡可能的定義字段為not null,除非這個(gè)字段需要null.(這個(gè)規(guī)則只適合字段為KEY的情形)
3).如果沒有用到變長字段的話比如varchar,那就采用固定大小的紀(jì)錄格式比如char.(CHAR 總是比VARCHR快)
4).表的主索引應(yīng)該盡可能的短.這樣的話每條紀(jì)錄都有名字標(biāo)志且更高效.
5).只創(chuàng)建確實(shí)需要的索引.索引有利于檢索記錄,但是不利于快速保存記錄.如果總是要在表的組合字段上做搜索,那么就在這些字段上創(chuàng)建索引.索引的第一部分必須是最常使用的字段.如果總是需要用到很多字段,首先就應(yīng)該多復(fù)制這些字段,使索引更好的壓縮.
(這條只適合MYISAM引擎的表,對(duì)于INNODB則在保存記錄的時(shí)候關(guān)系不大,因?yàn)镮NNODB是以事務(wù)為基礎(chǔ)的,如果想快速保存記錄的話,特別是大批量的導(dǎo)入記錄的時(shí)候)
6).所有數(shù)據(jù)都得在保存到數(shù)據(jù)庫前進(jìn)行處理.
7).所有字段都得有默認(rèn)值.
8).在某些情況下,把一個(gè)頻繁掃描的表分成兩個(gè)速度會(huì)快好多.在對(duì)動(dòng)態(tài)格式表掃描以取得相關(guān)記錄時(shí),它可能使用更小的靜態(tài)格式表的情況下更是如此.
(具體的表現(xiàn)為:MYISAM表的MERGE類型,以及MYISAM和INNODB通用的分區(qū),詳情見手冊(cè))
9).不會(huì)用到外鍵約束的地方盡量不要使用外鍵.
MYSQL學(xué)習(xí)2.系統(tǒng)的用途
1).及時(shí)的關(guān)閉對(duì)MYSQL的連接.
2).explain 復(fù)雜的SQL語句.(這樣能確定你的SELECT 語句怎么優(yōu)化最佳)
3).如果兩個(gè)關(guān)聯(lián)表要做比較話,做比較的字段必須類型和長度都一致.(在數(shù)據(jù)龐大的時(shí)候建立INDEX)
4).LIMIT語句盡量要跟order by或者 distinct.這樣可以避免做一次full table scan.
5).如果想要清空表的所有紀(jì)錄,建議用truncate table tablename而不是delete from tablename.
不過有一個(gè)問題,truncate 不會(huì)在事務(wù)處理中回滾.因?yàn)樗{(diào)用create table 語句.
(Truncate Table 語句先刪除表然后再重建,這個(gè)是屬于文件級(jí)別的,所以自然快N多)
實(shí)測(cè)例子:
song2為INNODB表.
MYSQL學(xué)習(xí)3.系統(tǒng)的瓶頸
1).磁盤搜索.
并行搜索,把數(shù)據(jù)分開存放到多個(gè)磁盤中,這樣能加快搜索時(shí)間.
2).磁盤讀寫(IO)
可以從多個(gè)媒介中并行的讀取數(shù)據(jù).
3).CPU周期
數(shù)據(jù)存放在主內(nèi)存中.這樣就得增加CPU的個(gè)數(shù)來處理這些數(shù)據(jù).
4).內(nèi)存帶寬
當(dāng)CPU要將更多的數(shù)據(jù)存放到CPU的緩存中來的話,內(nèi)存的帶寬就成了瓶頸.
轉(zhuǎn)載請(qǐng)注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/2273.html