淺談數(shù)據(jù)庫(kù)查詢優(yōu)化的幾種思路

1.使用索引

應(yīng)盡量避免全表掃描显拜,首先應(yīng)考慮在 where 及 order by ,group by 涉及的列上建立索引

2.優(yōu)化 SQL 語(yǔ)句

2.1通過(guò) explain(查詢優(yōu)化神器)用來(lái)查看 SQL 語(yǔ)句的執(zhí)行效果

可以幫助選擇更好的索引和優(yōu)化查詢語(yǔ)句, 寫出更好的優(yōu)化語(yǔ)句矮固。 通常我們可以對(duì)比較復(fù)雜的尤其是涉及到多表的 SELECT 語(yǔ)句档址, 把關(guān)鍵字 EXPLAIN 加到前面, 查看執(zhí)行計(jì)劃守伸。例如: explain select * from news;

2.2任何地方都不要使用 select * from t

用具體的字段列表代替“*” 尼摹, 不要返回用不到的任何字段剂娄。
mysql innodb上的理解。
1宜咒,不需要的字段會(huì)增加數(shù)據(jù)傳輸?shù)臅r(shí)間故黑,即使mysql服務(wù)器和客戶端是在同一臺(tái)機(jī)器上,使用的協(xié)議還是tcp混埠,通信也是需要額外的時(shí)間诗轻。
2扳炬,要取的字段、索引的類型半醉,和這兩個(gè)也是有關(guān)系的缩多。舉個(gè)例子养晋,對(duì)于user表,有name和phone的聯(lián)合索引逊抡,select name from user where phone=12345678912 和 select * from user where phone=12345678912秦忿,前者要比后者的速度快灯谣,因?yàn)閚ame可以在索引上直接拿到蛔琅,不再需要讀取這條記錄了。
3辜窑,大字段穆碎,例如很長(zhǎng)的varchar所禀,blob,text色徘。準(zhǔn)確來(lái)說(shuō)褂策,長(zhǎng)度超過(guò)728字節(jié)的時(shí)候,會(huì)把超出的數(shù)據(jù)放到另外一個(gè)地方耿焊,因此讀取這條記錄會(huì)增加一次io操作搀别。

2.3索引列不能參與計(jì)算,保持列“干凈”

比如from_unixtime(create_time) = ’2014-05-29’就不能使用到索引歇父,原因很簡(jiǎn)單榜苫,b+樹中存的都是數(shù)據(jù)表中的字段值垂睬,但進(jìn)行檢索時(shí)抗悍,需要把所有元素都應(yīng)用函數(shù)才能比較,顯然成本太大赏壹。所以語(yǔ)句應(yīng)該寫成create_time = unix_timestamp(’2014-05-29’);

2.4查詢盡可能使用 limit 減少返回的行數(shù)蝌借, 減少數(shù)據(jù)傳輸時(shí)間和帶寬浪費(fèi)菩佑。

3 優(yōu)化數(shù)據(jù)庫(kù)對(duì)象

3.1優(yōu)化表的數(shù)據(jù)類型

使用 procedure analyse()函數(shù)對(duì)表進(jìn)行分析, 該函數(shù)可以對(duì)表中列的數(shù)據(jù)類型提出優(yōu)化建議凝化。 能小就用小稍坯。 表數(shù)據(jù)類型第一個(gè)原則是: 使用能正確的表示和存儲(chǔ)數(shù)據(jù)的最短類型。 這樣可以減少對(duì)磁盤空間搓劫、 內(nèi)存劣光、 cpu 緩存的使用袜蚕。

使用方法: select * from 表名 procedure analyse();

3.2 對(duì)表進(jìn)行拆分

通過(guò)拆分表可以提高表的訪問(wèn)效率。 有 2 種拆分方法

1.垂直拆分
把主鍵和一些列放在一個(gè)表中绢涡, 然后把主鍵和另外的列放在另一個(gè)表中。 如果一個(gè)表中某些列常用遣疯, 而另外一些不常用雄可, 則可以采用垂直拆分。

2.水平拆分
根據(jù)一列或者多列數(shù)據(jù)的值把數(shù)據(jù)行放到二個(gè)獨(dú)立的表中缠犀。

3.3 使用中間表來(lái)提高查詢速度

創(chuàng)建中間表数苫, 表結(jié)構(gòu)和源表結(jié)構(gòu)完全相同虐急, 轉(zhuǎn)移要統(tǒng)計(jì)的數(shù)據(jù)到中間表, 然后在中間表上進(jìn)行統(tǒng)計(jì)敬惦, 得出想要的結(jié)果。

4.硬件優(yōu)化

4.1 CPU 的優(yōu)化

選擇多核和主頻高的 CPU畴椰。

4.2 內(nèi)存的優(yōu)化

使用更大的內(nèi)存潜叛。 將盡量多的內(nèi)存分配給 MYSQL 做緩存销斟。

4.3 磁盤 I/O 的優(yōu)化

4.3.1 使用磁盤陣列
RAID 0 沒(méi)有數(shù)據(jù)冗余, 沒(méi)有數(shù)據(jù)校驗(yàn)的磁盤陳列棱诱。 實(shí)現(xiàn) RAID 0至少需要兩塊以上的硬盤, 它將兩塊以上的硬盤合并成一塊靡菇, 數(shù)據(jù)連續(xù)地分割在每塊盤上育苟。

RAID1 是將一個(gè)兩塊硬盤所構(gòu)成 RAID 磁盤陣列, 其容量?jī)H等于一塊硬盤的容量脖母, 因?yàn)榱硪粔K只是當(dāng)作數(shù)據(jù)“鏡像”。使用 RAID-0+1 磁盤陣列。 RAID 0+1 是 RAID 0 和 RAID 1 的組合形式。 它在提供與 RAID 1 一樣的數(shù)據(jù)安全保障的同時(shí)吕朵, 也提供了與 RAID 0 近似的存儲(chǔ)性能。

4.3.2 調(diào)整磁盤調(diào)度算法
選擇合適的磁盤調(diào)度算法梧税, 可以減少磁盤的尋道時(shí)間

5.MySQL 自身的優(yōu)化

對(duì) MySQL 自身的優(yōu)化主要是對(duì)其配置文件 my.cnf 中的各項(xiàng)參數(shù)進(jìn)行優(yōu)化調(diào)整。 如指定 MySQL 查詢緩沖區(qū)的大小, 指定 MySQL 允許的最大連接進(jìn)程數(shù)等。

6.應(yīng)用優(yōu)化

6.1 使用數(shù)據(jù)庫(kù)連接池

6.2 使用查詢緩存

它的作用是存儲(chǔ) select 查詢的文本及其相應(yīng)結(jié)果。 如果隨后收到一個(gè)相同的查詢, 服務(wù)器會(huì)從查詢緩存中直接得到查詢結(jié)果。 查詢緩存適用的對(duì)象是更新不頻繁的表偎快, 當(dāng)表中數(shù)據(jù)更改后姊氓, 查詢緩存中的相關(guān)條目就會(huì)被清空。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末荡短,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子噩峦,更是在濱河造成了極大的恐慌辫红,老刑警劉巖切油,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件攻谁,死亡現(xiàn)場(chǎng)離奇詭異受楼,居然都是意外死亡骚灸,警方通過(guò)查閱死者的電腦和手機(jī)丈钙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事污它∠樯剑” “怎么了供常?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵色迂,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我倔撞,道長(zhǎng)躏啰,這世上最難降的妖魔是什么蔓同? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任尚揣,我火速辦了婚禮滨巴,結(jié)果婚禮上耗跛,老公的妹妹穿的比我還像新娘羔砾。我一直安慰自己态秧,他們只是感情好捐友,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布规伐。 她就那樣靜靜地躺著豁陆,像睡著了一般譬圣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上谒亦,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天孕豹,我揣著相機(jī)與錄音,去河邊找鬼饱溢。 笑死次舌,一個(gè)胖子當(dāng)著我的面吹牛逐沙,可吹牛的內(nèi)容都是我干的洼畅。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼芋浮!你這毒婦竟也來(lái)了瘤旨?” 一聲冷哼從身側(cè)響起宏胯,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤滓侍,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后卜高,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體弥姻,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年篙悯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蚁阳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鸽照,死狀恐怖螺捐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情矮燎,我是刑警寧澤定血,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站诞外,受9級(jí)特大地震影響澜沟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜峡谊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一茫虽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧既们,春花似錦濒析、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至斯棒,卻和暖如春盾致,著一層夾襖步出監(jiān)牢的瞬間主经,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工庭惜, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留罩驻,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓蜈块,卻偏偏與公主長(zhǎng)得像鉴腻,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子百揭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容