MySQL数据库如何做好优化
MySQL數(shù)據(jù)庫(kù)如何做好優(yōu)化
(碰到過(guò)好幾次這樣的題目,可每次都不能答的完全正確,現(xiàn)在大概列出如下:(望各位補(bǔ)充)
(1.數(shù)據(jù)庫(kù)的設(shè)計(jì)
((盡量把數(shù)據(jù)庫(kù)設(shè)計(jì)的更小的占磁盤(pán)空間。
(1).盡可能使用更小的整數(shù)類(lèi)型。(mediumint就比int更合適)。
(2).盡可能的定義字段為not null,除非這個(gè)字段需要null。
(3).如果沒(méi)有用到變長(zhǎng)字段的話(huà)比如varchar,那就采用固定大小的紀(jì)錄格式比如char。
(4).表的主索引應(yīng)該盡可能的短,這樣的話(huà)每條紀(jì)錄都有名字標(biāo)志且更高效。
(5).只創(chuàng)建確實(shí)需要的索引。索引有利于檢索記錄,但是不利于快速保存記錄。如果總是要在表的組合字段上做搜索,那么就在這些字段上創(chuàng)建索引。索引的第一部分必須是最常使用的字段。如果總是需要用到很多字段,首先就應(yīng)該多復(fù)制這些字段,使索引更好的壓縮。
(6).所有數(shù)據(jù)都得在保存到數(shù)據(jù)庫(kù)前進(jìn)行處理。
(7).所有字段都得有默認(rèn)值。
(8).在某些情況下,把一個(gè)頻繁掃描的表分成兩個(gè)速度會(huì)快好多。在對(duì)動(dòng)態(tài)格式表掃描以取得相關(guān)記錄時(shí),它可能使用更小的靜態(tài)格式表的情況下更是如此。
(2.系統(tǒng)的用途
(1).盡量使用長(zhǎng)連接。
(2).explain 復(fù)雜的SQL語(yǔ)句。
(3).如果兩個(gè)關(guān)聯(lián)表要做比較話(huà),做比較的字段必須類(lèi)型和長(zhǎng)度都一致。
(4).LIMIT語(yǔ)句盡量要跟 order by 或者 distinct。這樣可以避免做一次full table scan。
(5).如果想要清空表的所有紀(jì)錄,建議用 truncate table tablename 而不是 delete from tablename。
(6).能使用 STORE PROCEDURE 或者 USER FUNCTION的時(shí)候。
(7).在一條insert語(yǔ)句中采用多重紀(jì)錄插入格式,而且使用 load data infile 來(lái)導(dǎo)入大量數(shù)據(jù),這比單純的indert快好多。
(8).經(jīng)常 OPTIMIZE TABLE 來(lái)整理碎片。
(9).還有就是 date 類(lèi)型的數(shù)據(jù)如果頻繁要做比較的話(huà)盡量保存在 unsigned int 類(lèi)型比較快。
(3.系統(tǒng)的瓶頸
(1).磁盤(pán)搜索
((并行搜索,把數(shù)據(jù)分開(kāi)存放到多個(gè)磁盤(pán)中,這樣能加快搜索時(shí)間.
(2).磁盤(pán)讀寫(xiě)(IO)
((可以從多個(gè)媒介中并行的讀取數(shù)據(jù)。
(3).CPU周期
((數(shù)據(jù)存放在主內(nèi)存中,這樣就得增加CPU的個(gè)數(shù)來(lái)處理這些數(shù)據(jù)。
(4).內(nèi)存帶寬
((當(dāng)CPU要將更多的數(shù)據(jù)存放到CPU的緩存中來(lái)的話(huà),內(nèi)存的帶寬就成了瓶頸.
轉(zhuǎn)載于:https://blog.51cto.com/jinyan2049/1422125
總結(jié)
以上是生活随笔為你收集整理的MySQL数据库如何做好优化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ubuntu设置静态ip不能联网
- 下一篇: Oracle SQL Loader的详细