最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mysql中提高Order by語(yǔ)句查詢效率的兩個(gè)思路分析

 更新時(shí)間:2011年03月06日 16:17:19   作者:  
在MySQL數(shù)據(jù)庫(kù)中,Order by語(yǔ)句的使用頻率是比較高的。但是眾所周知,在使用這個(gè)語(yǔ)句時(shí),往往會(huì)降低數(shù)據(jù)查詢的性能。
因?yàn)榭赡苄枰獙?duì)數(shù)據(jù)庫(kù)的記錄進(jìn)行重新排序。在這篇文章中,筆者就談?wù)勌岣逴rder By語(yǔ)句查詢效率的兩個(gè)思路,以供大家參考。

在MySQL數(shù)據(jù)庫(kù)中,Order by語(yǔ)句的使用頻率是比較高的。但是眾所周知,在使用這個(gè)語(yǔ)句時(shí),往往會(huì)降低數(shù)據(jù)查詢的性能。因?yàn)榭赡苄枰獙?duì)數(shù)據(jù)庫(kù)的記錄進(jìn)行重新排序。在這篇文章中,筆者就談?wù)勌岣逴rder By語(yǔ)句查詢效率的兩個(gè)思路,以供大家參考。

 

 一、建議使用一個(gè)索引來(lái)滿足Order By子句。

在條件允許的情況下,筆者建議最好使用一個(gè)索引來(lái)滿足Order By子句。如此的話,就可以避免額外的排序工作。這里筆者需要強(qiáng)調(diào)的一點(diǎn)是及時(shí)Order By子句不確切匹配索引,但是只要Where子句中所有未使用的索引部分和所有額外的 Order by子句中的列為常數(shù),此時(shí)就可以使用索引。具體的來(lái)說(shuō),推薦如下的查詢語(yǔ)句。

1、select * from ad_user where is_active='Y' order by value;

在這條查詢語(yǔ)句中,使用了兩個(gè)列。在Where查詢語(yǔ)句中,查詢表中活動(dòng)的記錄。此時(shí)使用的是一個(gè)常數(shù)的條件。而在Order By子句中,則根據(jù)Value列的值來(lái)進(jìn)行排序。如果在表設(shè)計(jì)中,為這個(gè)字段設(shè)置一個(gè)索引。此時(shí)使用這條語(yǔ)句來(lái)進(jìn)行查詢,則查詢結(jié)果就不需要進(jìn)行額外的排序工作,從而可以提高數(shù)據(jù)的查詢效率。

這也就是說(shuō),如果Where條件語(yǔ)句與Order By條件語(yǔ)句一起使用,如果需要通過(guò)一個(gè)索引來(lái)提高查詢效率的話,那么就必須滿足一個(gè)條件,及where條件語(yǔ)句中所使用的參數(shù)值是常數(shù),而不是變量。如果使用變量的話,這個(gè)方法就不奏效了。

2、注意有些情況下不能夠使用索引來(lái)提高Order By語(yǔ)句的查詢性能。

這里需要注意的是,并不是任何情況下都能夠通過(guò)使用索引來(lái)提高Order Byz子句的查詢效率。如對(duì)不同的關(guān)鍵字使用這個(gè)語(yǔ)句、混合使用ASC模式和DESC模式、用于查詢條件的關(guān)鍵字與Order By語(yǔ)句中所使用的關(guān)鍵字不同、對(duì)關(guān)鍵字的非連續(xù)元素使用Order By子句、在同一條語(yǔ)句中使用不同的Order BY 和Group BY表達(dá)式、使用的表索引的類型不能夠按順序來(lái)保存行等情況,就無(wú)法通過(guò)使用索引來(lái)解決Order By語(yǔ)句的排序問(wèn)題。此時(shí)就需要另想他法。如可以重新調(diào)整表結(jié)構(gòu)或者查詢語(yǔ)句,以滿足使用這個(gè)特性的特定條件。

其實(shí)這里就遇到一個(gè)均衡的問(wèn)題。如在查詢時(shí),Where條件語(yǔ)句中往往使用的是一個(gè)變量,這主要是為了提高語(yǔ)句的靈活性。這個(gè)變量接受前端用戶傳遞過(guò)來(lái)的參數(shù)。此時(shí)如果用戶同時(shí)有排序的需求,根據(jù)上面介紹的規(guī)則,就無(wú)法使用索引來(lái)提高查詢的效率。此時(shí)作為開發(fā)人員,就需要評(píng)估,需要語(yǔ)句的靈活性還是需要查詢的性能。通常情況下,對(duì)于記錄量比較大的查詢,同時(shí)其查詢的格式比較固定,如大容量的月報(bào)與年報(bào),此時(shí)就會(huì)傾向于查詢語(yǔ)句的性能。而對(duì)于記錄量比較少的查詢,如日?qǐng)?bào)表,或者使用頻率比較高的查詢語(yǔ)句,此時(shí)會(huì)更加的傾向于查詢的靈活性。作為開發(fā)人員,現(xiàn)在需要關(guān)注的就是根據(jù)用戶實(shí)際的情況,來(lái)選擇合適的解決方式。

通常情況下,為了避免使用Order By語(yǔ)句導(dǎo)致的查詢速度變慢的問(wèn)題,先是需要考慮使用索引來(lái)解決問(wèn)題。如果不能夠通過(guò)索引來(lái)解決問(wèn)題,那么可以通過(guò)緩存在一定程度來(lái)緩解。如可以增加soft_buffer_size變量的大小、根據(jù)實(shí)際情況調(diào)整Read_buffer_size變量的大小、更改tmpdir目錄將其指向具有大量空閑空間的專用文件系統(tǒng)等等。有時(shí)候管理員可以使用這個(gè)特性將負(fù)載均勻分布到多個(gè)目錄中去。

二、使用Explain關(guān)鍵字來(lái)確認(rèn)是否可以通過(guò)索引來(lái)解決Order BY速度問(wèn)題。

如果用戶無(wú)法確定是否可以通過(guò)索引來(lái)提高Order By語(yǔ)句的查詢效率,那么就可以憑借Explain關(guān)鍵字來(lái)幫助關(guān)鍵員進(jìn)行判斷。如可以通過(guò)使用explain select * from ad_user where is_active='Y' order by value(即在常規(guī)的查詢語(yǔ)句前面加上一個(gè)explain關(guān)鍵字),用來(lái)判斷是否可以使用索引來(lái)提高查詢的效率。判斷的方法是:如果這個(gè)查詢語(yǔ)句中,有一個(gè)using filesort這個(gè)字段,那么就非常的抱歉,無(wú)法通過(guò)使用索引來(lái)提高這個(gè)語(yǔ)句的查詢效率。反之,沒有這個(gè)字段,則說(shuō)明可以通過(guò)索引來(lái)提高查詢效率。

這里需要說(shuō)明的是,通常情況下文件排序優(yōu)化不僅僅可以用于記錄排序關(guān)鍵字和行的位置,并且還會(huì)記錄查詢所需要的列。如此的話,就可以避免多次讀取行的信息。為了讓大家更加明白其中的道理筆者簡(jiǎn)單說(shuō)明一下這工作的過(guò)程。通常情況下,文件排序優(yōu)化包括四 個(gè)步驟。第一步讀取與Where條件語(yǔ)句所匹配的行信息;第二步對(duì)于每個(gè)行、記錄構(gòu)成排序關(guān)鍵字和行位置的一系列值,并且記錄查詢所需要的列;第三步根據(jù)排序關(guān)鍵字排序元祖;第四步按排序的順序檢索行,不過(guò)此時(shí)是直接從排序的元祖讀取所需要的列(使用的是第三個(gè)步驟中的結(jié)果),而不會(huì)重新訪問(wèn)表中的數(shù)據(jù)。顯然使用文件排序優(yōu)化的思路,可以避免重復(fù)訪問(wèn)表,從而提高查詢的效率。

原文鏈接:http://publish.itpub.net/a2011/0225/1160/000001160766.shtml

相關(guān)文章

  • 記一次MySQL Slave庫(kù)恢復(fù)實(shí)戰(zhàn)記錄

    記一次MySQL Slave庫(kù)恢復(fù)實(shí)戰(zhàn)記錄

    這篇文章主要介紹了記一次MySQL Slave庫(kù)恢復(fù)實(shí)戰(zhàn)記錄,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • MySQL中關(guān)于超鍵和主鍵及候選鍵的區(qū)別

    MySQL中關(guān)于超鍵和主鍵及候選鍵的區(qū)別

    這篇文章主要介紹了MySQL中關(guān)于超鍵和主鍵及候選鍵的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 一文帶你永久擺脫Mysql時(shí)區(qū)錯(cuò)誤問(wèn)題(idea數(shù)據(jù)庫(kù)可視化插件配置)

    一文帶你永久擺脫Mysql時(shí)區(qū)錯(cuò)誤問(wèn)題(idea數(shù)據(jù)庫(kù)可視化插件配置)

    在MySQL啟動(dòng)時(shí)會(huì)檢查當(dāng)前系統(tǒng)的時(shí)區(qū)并根據(jù)系統(tǒng)時(shí)區(qū)設(shè)置全局參數(shù)system_time_zone的值,下面這篇文章主要給大家介紹了關(guān)于如何永久擺脫Mysql時(shí)區(qū)錯(cuò)誤問(wèn)題(idea數(shù)據(jù)庫(kù)可視化插件配置)的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • Mysql去重的幾種方式分步講解

    Mysql去重的幾種方式分步講解

    SQL去重是數(shù)據(jù)分析工作中比較常見的一個(gè)場(chǎng)景,下面這篇文章主要給大家介紹了關(guān)于SQL去重的3種實(shí)用方法的相關(guān)資料,文中通過(guò)圖文以及實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • MySQL中查詢?nèi)罩九c慢查詢?nèi)罩镜幕緦W(xué)習(xí)教程

    MySQL中查詢?nèi)罩九c慢查詢?nèi)罩镜幕緦W(xué)習(xí)教程

    這篇文章主要介紹了MySQL中查詢?nèi)罩九c慢查詢?nèi)罩镜幕緦W(xué)習(xí)教程,文中還提到了MySQL自帶的Mysqldumpslow日志分析工具的使用,需要的朋友可以參考下
    2015-12-12
  • MySQL 8.0 驅(qū)動(dòng)與阿里druid版本兼容問(wèn)題解決

    MySQL 8.0 驅(qū)動(dòng)與阿里druid版本兼容問(wèn)題解決

    MySQL 8.0 驅(qū)動(dòng)與阿里druid版本不兼容會(huì)導(dǎo)致有報(bào)錯(cuò)問(wèn)題,本文就詳細(xì)的介紹一下解決方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-07-07
  • Sysbench對(duì)Mysql進(jìn)行基準(zhǔn)測(cè)試過(guò)程解析

    Sysbench對(duì)Mysql進(jìn)行基準(zhǔn)測(cè)試過(guò)程解析

    這篇文章主要介紹了Sysbench對(duì)Mysql進(jìn)行基準(zhǔn)測(cè)試過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • MySQL使用索引優(yōu)化性能

    MySQL使用索引優(yōu)化性能

    這篇文章介紹了MySQL使用索引優(yōu)化性能的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • MySQL分區(qū)表和分桶表的操作詳解

    MySQL分區(qū)表和分桶表的操作詳解

    這篇文章主要介紹了MySQL分區(qū)表和分桶表的操作,分區(qū)表和分桶表都是數(shù)據(jù)庫(kù)中的表,用于對(duì)數(shù)據(jù)進(jìn)行分區(qū)或分桶存儲(chǔ),以提高數(shù)據(jù)庫(kù)的性能和查詢效率,需要詳細(xì)了解可以參考下文
    2023-05-05
  • 淺析MySQL的注入安全問(wèn)題

    淺析MySQL的注入安全問(wèn)題

    這篇文章主要介紹了淺析MySQL的注入安全問(wèn)題,文中簡(jiǎn)單說(shuō)道了如何避免SQL注入敞開問(wèn)題的方法,需要的朋友可以參考下
    2015-05-05

最新評(píng)論

永定县| 寿光市| 双江| 克拉玛依市| 视频| 石棉县| 永定县| 安仁县| 邢台县| 林口县| 江安县| 马关县| 秭归县| 云阳县| 离岛区| 德安县| 廊坊市| 苍南县| 万荣县| 南丹县| 柳江县| 扎鲁特旗| 长岛县| 苏州市| 永平县| 普宁市| 邯郸市| 江门市| 商洛市| 宿迁市| 崇仁县| 扶绥县| 疏勒县| 长子县| 开鲁县| 友谊县| 定兴县| 二连浩特市| 涞源县| 德江县| 中方县|