成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

從四個(gè)細(xì)節(jié)出發(fā)做好MySQL查詢優(yōu)化

數(shù)據(jù)庫 MySQL
MySQL由于性能優(yōu)越,使用方便,且速度快,受到很多用戶的支持,MySQL的應(yīng)用范圍是相當(dāng)普遍的,MySQL查詢誰都會(huì),可是您知道優(yōu)化查詢的四個(gè)細(xì)節(jié)嗎?下面就為您介紹做好MySQL查詢優(yōu)化的四個(gè)小細(xì)節(jié)。

導(dǎo)讀:在任何一個(gè)數(shù)據(jù)庫中,查詢優(yōu)化都是不可避免的一個(gè)話題。對(duì)于數(shù)據(jù)庫工程師來說,優(yōu)化工作是最有挑戰(zhàn)性的工作。MySQL開源數(shù)據(jù)庫也不例外。其實(shí)筆者認(rèn)為,數(shù)據(jù)庫優(yōu)化并沒有大家所想象的那么苦難,下文中介紹的小方法,會(huì)讓大家感覺查詢優(yōu)化容易的多。通常情況下,大家可以從以下四個(gè)細(xì)節(jié)出發(fā)來做好MySQL數(shù)據(jù)庫的查詢優(yōu)化工作。

一、利用EXPLAIN關(guān)鍵字來評(píng)估查詢語句中的缺陷
  如下圖所示,現(xiàn)在筆者在數(shù)據(jù)庫中執(zhí)行了一條簡(jiǎn)單的Select查詢語句,從一個(gè)表格中查詢所有信息。現(xiàn)在數(shù)據(jù)庫管理員想知道,數(shù)據(jù)庫在執(zhí)行這條語句時(shí),做了哪些工作?或者說想知道,這條查詢語句有沒有進(jìn)一步優(yōu)化的可能。如果要了解這個(gè)信息的話,就可以在查詢語句中加入一個(gè)Explain關(guān)鍵字。

通過Select查詢語句可以從數(shù)據(jù)庫中查詢某個(gè)表中的數(shù)據(jù)。但是這條語句執(zhí)行的效率如何?是否還有優(yōu)化的余地?這些內(nèi)容是無法從上面這個(gè)簡(jiǎn)單的查詢語句中獲得的。為了了解更加詳細(xì)的信息,需要加入Explain關(guān)鍵字。如下圖所示:

加入Explain關(guān)鍵字之后,系統(tǒng)并沒有查詢出表格中的數(shù)據(jù),而只是顯示了查詢過程中的一些信息。這些信息對(duì)于我們后續(xù)進(jìn)行數(shù)據(jù)庫查詢優(yōu)化非常有幫助。從上面這個(gè)信息中我們可以看出,用戶只是進(jìn)行來一個(gè)簡(jiǎn)單的查詢。在這個(gè)查詢中,沒有用到任何索引、關(guān)鍵字等內(nèi)容,也沒有用到Where條件語句。為此這個(gè)查詢語句并不是很合理。雖然其可以找到***正確的結(jié)果,不過其查詢效率可能并不是很明顯。為此數(shù)據(jù)庫專家可以根據(jù)上面顯示的信息來進(jìn)行優(yōu)化。如果我們現(xiàn)在在查詢語句中加入一條Where語句,那么又會(huì)有什么樣的結(jié)果呢?如下圖所示。

此時(shí)在***一個(gè)Extra字段中,系統(tǒng)就會(huì)顯示已經(jīng)使用了Where語句。在進(jìn)行數(shù)據(jù)庫優(yōu)化中,我們需要抓住結(jié)果中的NULL字段或者空白內(nèi)容的字段。這些地方往往是我們進(jìn)行優(yōu)化的重點(diǎn)。如上圖所示,我們可以給這條Select語句進(jìn)行如下的優(yōu)化:在表中設(shè)置關(guān)鍵字或者索引,來提高查詢的效率。

二、數(shù)據(jù)比較時(shí)采用相同類型的列以提高查詢效率
在數(shù)據(jù)查詢時(shí),有時(shí)候會(huì)在條件語句中加入判斷的條件。如現(xiàn)在有兩張表:用戶基本信息表和用戶權(quán)限表,兩者通過用戶編號(hào)作為關(guān)聯(lián)。現(xiàn)在需要查詢出每個(gè)用戶對(duì)應(yīng)什么樣的權(quán)限,此時(shí)就要通過用戶編號(hào)作為查詢條件來進(jìn)行查詢。現(xiàn)在假設(shè)用戶基本信息表中的用戶編號(hào)字段為CHAR類型的;而用戶權(quán)限表中的用戶編號(hào)是VARCHAR類型的。這兩個(gè)數(shù)據(jù)類型雖然都是字符型,但是不是同一種類型。現(xiàn)在對(duì)這連個(gè)表執(zhí)行關(guān)聯(lián)查詢,其查詢的效率如何呢?首先需要確定的一點(diǎn)是,雖然他們兩個(gè)是不同類型的字符型數(shù)據(jù),不過是相互兼容的。***仍然可以得到正確的結(jié)果。明確了這一點(diǎn)之后,我們?cè)賮砜紤],能否對(duì)這個(gè)查詢語句進(jìn)行優(yōu)化呢?

我們?cè)偌僭O(shè)一下。現(xiàn)在這兩個(gè)表的用戶編號(hào)的數(shù)據(jù)類型都是CHAR。現(xiàn)在再對(duì)這兩個(gè)表進(jìn)行關(guān)聯(lián)查詢,得到的結(jié)果是否相同呢?我們測(cè)試的結(jié)果是,查詢的結(jié)果是相同的,但是其所花費(fèi)的時(shí)間是不同的。而且隨著數(shù)據(jù)量的增加,兩個(gè)查詢所相差的時(shí)間會(huì)越來越長(zhǎng)。從這里可以知道,雖然這兩個(gè)查詢語句是等價(jià)的,但是其查詢的效率不同。

在MySQL數(shù)據(jù)庫中,雖然相互兼容的數(shù)據(jù)類型可以進(jìn)行相互比較。但是其查詢的效率會(huì)有所影響。從提高數(shù)據(jù)庫查詢效率的角度出發(fā),筆者建議在查詢條件語句中***比較具有相同類型的列。在同等條件下,相同的列類型比不同類型的列能夠提供更好的性能。特別是在數(shù)據(jù)量比較多的數(shù)據(jù)庫中,這尤其重要。

不過這個(gè)優(yōu)化需要涉及到數(shù)據(jù)表的列類型。為此在數(shù)據(jù)表進(jìn)行設(shè)計(jì)時(shí),就需要考慮這一點(diǎn)。如針對(duì)上面這個(gè)案例,我們可以在兩個(gè)表中專門設(shè)置一個(gè)用戶ID列。可以使用整數(shù)類型的序列,讓系統(tǒng)進(jìn)行自動(dòng)編號(hào)。然后在查詢時(shí)通過這個(gè)用戶ID列來進(jìn)行比較,而不是通過原來的用戶編號(hào)列進(jìn)行比較。相對(duì)來說,這么操作查詢的效率會(huì)更高。

三、在Like關(guān)鍵字的起始處通配符要謹(jǐn)慎使用
在實(shí)際工作中,筆者發(fā)現(xiàn)不少數(shù)據(jù)庫管理員有一個(gè)不好的習(xí)慣。他們?cè)谑褂肔ike等關(guān)鍵字時(shí),通配符會(huì)亂用。如現(xiàn)在用戶需要查找所有以為前綴的產(chǎn)品信息。用戶在查詢時(shí),會(huì)習(xí)慣性的使用下面的語句進(jìn)行查詢:like 這個(gè)條件語句會(huì)查詢出所有品名中有LOOK這個(gè)單詞的紀(jì)錄,而不是查詢出以LOOK為前綴的產(chǎn)品信息。

雖然最終的結(jié)果可能是相同的。但是兩者的查詢效率不同。其實(shí)這很大一部分原因是客戶端應(yīng)用程序設(shè)計(jì)不當(dāng)所造成的。如在客戶端應(yīng)用程序設(shè)計(jì)時(shí),系統(tǒng)會(huì)默認(rèn)顯示一個(gè)%符號(hào)。如下圖所示。

這么設(shè)計(jì)的本意是好的,讓系統(tǒng)能夠支持模糊查詢。但是用戶在實(shí)際操作起來,就可以有問題。如用戶在查詢時(shí),不會(huì)在%號(hào)前面輸入LOOK這個(gè)單詞,而是在%后面輸入LOOK這個(gè)單詞。因?yàn)樵诓樵儠r(shí),光標(biāo)會(huì)自動(dòng)定位到%號(hào)后面。通常情況下,用戶在輸入時(shí)不會(huì)再去調(diào)整光標(biāo)的位置。此時(shí)就出現(xiàn)了上面所說的這種情況。

為此筆者建議,在Like等關(guān)鍵字后面如果需要用到通配符的話,要非常的謹(jǐn)慎。特別是從大量數(shù)據(jù)中查找紀(jì)錄時(shí),這個(gè)通配符的位置一定要用對(duì)地方。在起始處能夠不同通配符的話,盡量不要使用通配符。

四、盡量使用其它形式來代替Like關(guān)鍵字
上面提到在使用Like關(guān)鍵字時(shí)需要注意通配符的位置。其實(shí)從查詢效率來看,我們不僅需要注意通配符的位置,而且能夠不用Like關(guān)鍵字***就不用。其實(shí)在SQL語句中,可以利用其他方式來代替Like關(guān)鍵字。如現(xiàn)在有一個(gè)產(chǎn)品表,其編號(hào)為6位。現(xiàn)在需要查詢以9開頭的產(chǎn)品編號(hào)。這該怎么操作呢?

一是可以通過使用Like關(guān)鍵字,如LIKE “9%”。注意這個(gè)通配符的位置。這個(gè)條件語句可以查到所需要的結(jié)果。但是從性能優(yōu)化的角度看,這條語句不是很好的處理方式。我們還可以通過一些折中的方式來實(shí)現(xiàn)。

二是通過比較符號(hào)來實(shí)現(xiàn)。如可以使用Value>=900000 and Value<=999999這種方式來實(shí)現(xiàn)。雖然兩者的查詢的結(jié)果是相同的。但是查詢的時(shí)間這條語句要比上面這個(gè)采用Like符號(hào)的語句要短的多。

通過上文的學(xué)習(xí),相信在以后MySQL查詢優(yōu)化時(shí),遇到的問題就能迎刃而解啦,希望這四個(gè)MySQL查詢優(yōu)化的小技巧能夠幫到大家。

【編輯推薦】

  1. MySQL查詢優(yōu)化器
  2. MySQL查詢優(yōu)化程序
  3. 使用Limit參數(shù)實(shí)現(xiàn)MySQL查詢優(yōu)化
  4. 使用調(diào)度和鎖定進(jìn)行MySQL查詢優(yōu)化
責(zé)任編輯:迎迎 來源: IT168
相關(guān)推薦

2016-02-15 09:13:40

移動(dòng)頁面性能優(yōu)化前端

2011-07-03 21:22:05

2010-12-03 09:53:49

WAN優(yōu)化

2013-01-10 09:47:09

HBase性能優(yōu)化

2020-11-09 10:27:53

網(wǎng)絡(luò)安全

2009-06-30 09:56:00

ADSL設(shè)備撥號(hào)故障

2023-11-13 10:00:09

數(shù)據(jù)中心服務(wù)器

2018-05-13 16:23:40

工業(yè)物聯(lián)網(wǎng)工業(yè)4.0物聯(lián)網(wǎng)

2013-05-22 16:37:15

優(yōu)化IAP設(shè)計(jì)運(yùn)營(yíng)推廣

2022-02-23 15:09:18

數(shù)字化轉(zhuǎn)型國有企業(yè)數(shù)據(jù)

2016-12-09 09:31:22

HadoopSQL大數(shù)據(jù)

2018-01-30 05:40:21

loT設(shè)備安全網(wǎng)絡(luò)安全

2022-04-07 09:34:39

技巧云服務(wù)費(fèi)用

2020-05-20 15:27:44

智慧城市數(shù)據(jù)技術(shù)

2013-03-18 13:31:28

2024-06-25 12:45:05

2010-10-09 09:46:28

MySQL外鍵

2021-08-10 08:01:08

Synchronize鎖膨脹鎖消除

2013-09-10 17:41:56

移動(dòng)網(wǎng)站性能優(yōu)化移動(dòng)web

2012-04-26 14:12:18

云測(cè)試
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 精品国产一区二区国模嫣然 | 成人小视频在线观看 | 日韩欧美二区 | 黄色成人在线观看 | 亚洲+变态+欧美+另类+精品 | 日韩在线观看一区二区三区 | 国产精品www | 日日摸日日添日日躁av | 婷婷在线网站 | 国产精品一区二区av | 夜夜爽99久久国产综合精品女不卡 | 欧美一区中文字幕 | 一区二区三区欧美在线 | 青青草久久 | 久久久久久亚洲精品 | 犬夜叉在线观看 | 日产精品久久久一区二区福利 | 一区二区三区四区不卡视频 | 亚洲欧美中文日韩在线v日本 | 免费久久久 | 一区二区激情 | 一区中文字幕 | 精品国产乱码久久久久久蜜柚 | 不卡一区| 天天草狠狠干 | 国产精品毛片 | 97日日碰人人模人人澡分享吧 | 日本综合在线观看 | 亚洲国产精品成人综合久久久 | 日韩在线精品强乱中文字幕 | 日韩精品久久久 | 九九热在线免费视频 | 成人看片在线观看 | 不卡一二三区 | 中文字幕综合 | 91免费在线看| 中文字幕av一区 | 99精品电影| 日本成人免费网站 | 精品在线一区二区三区 | 91精品在线播放 |