亚洲免费不卡_在线视频精品_国产尤物精品_久久久久网址_久久精品91_欧美va天堂在线_狠狠入ady亚洲精品_亚洲午夜精品福利_国产精品草草_午夜精品久久99蜜桃的功能介绍

詳解sqlite中的查詢規(guī)劃器
來源:易賢網(wǎng) 閱讀:99164 次 日期:2016-11-15 09:38:18
溫馨提示:易賢網(wǎng)小編為您整理了“詳解sqlite中的查詢規(guī)劃器”,方便廣大網(wǎng)友查閱!

這個查詢不是特別復雜,不過,即便這樣,它仍然可以替代上百行,也許是上千行處理過程代碼。這個查詢的要點是:向下掃描event表,查找滿足下列三個條件中任何一個的最新的200條提交記錄:

  1.     此提交含有trunk標簽。
  2.     此提交有個子提交含有“trunk標簽。
  3.     此提交有個父提交含有“trunk標簽。

第一個條件將顯示所有主干分支上的提交,第二個和第三個條件包含合并到主干分支,或者由主干分支產(chǎn)生的提交。這三個條件是通過在此查詢的where子句中用or連接三個exists語句實現(xiàn)的。使用下一代查詢規(guī)劃器引起的性能下降是由第二個和第三個條件產(chǎn)生的。兩個條件里存在的問題是相同的,因此我們只看第二個條件。第二個條件的子查詢可以重寫為如下語句(把次要的和不重要的進行了簡化):

plink表保存著各個提交之間的父子關系。tagxref表把標簽映射到提交上。作為參考,對這兩個表進行查詢的模式的相關部分顯示如下:
實現(xiàn)這樣的查詢只有兩個方法值得考慮。(當然可能還有許多其他算法,不過它們中的任何一個都不是“最佳”算法的競爭者。

  •     查找提交$ckid的所有子提交,然后對每一個進行測試,看看是否有子提交包含$trunk標簽
  •     查找所有包含$trunk標簽的提交,然后對每個這樣的提交進行測試,看看是否有$ckid提交的子提交。

僅憑直覺,我們人類認為第一個算法是最佳選擇。每個提交可能有幾個子提交(其中有一個提交是我們最常用到的。),然后對每個子提交進行測試,用對數(shù)運算計算出查找到$trunk標簽的時間。實際上,算法1確實較快。然而下一代查詢規(guī)劃器卻沒有使用人們直覺上的最佳選擇。下一代查詢規(guī)劃器一定是選擇了很難得算法,算法2在數(shù)學上相對稍微難些。這是因為:在沒有其他信息的情況下下一代查詢規(guī)劃器一定假設plink_i1和tagxref_i1索引具有同等的質量和同等的可選擇性。算法2使用了tagxref_i1索引的一個字段,plink_i1索引的兩個字段,而算法1只是使用了這兩個索引的第一個字段。正是由于算法2使用了多個字段的索引,所以下一代查詢規(guī)劃器才會以自己的標準正確地確定它作為兩種算法中性能較好的算法。兩個算法所花費的時間非常接近,算法2 只是勉強稍稍領先算法1。不過,這種情況下,選擇算法2確實是正確的。
很不幸,在實際的應用中算法2比算法1要慢些。

出現(xiàn)這樣的問題是因為索引并不是具有同等質量。一個提交有可能只有一個子提交。這樣plink_i1索引的第一個字段通常縮減值對一行進行搜索。不過由于成千上萬的提交都包含有trunk標簽,所以tagxref_i1的第一個字段對縮減搜索不會有多大幫助。

下一代查詢規(guī)劃器是沒有辦法知道tagxref_i1在這樣的查詢中幾乎沒有什么用處,除非在數(shù)據(jù)庫上運行analyze。analyze命令 收集了各個索引的質量統(tǒng)計信息,并把 這些統(tǒng)計信息存儲到sqlite_stat1表里。如果下一代查詢規(guī)劃器能夠訪問這些統(tǒng)計信息 ,那么在很大程度上它就會非常容易地選擇算法1作為最佳算法。
難道舊查詢規(guī)劃器沒有選擇算法2?很簡單:因為nn算法甚至從來都沒有考慮到算法2。這類規(guī)劃問題的圖示如下:

在如左圖那樣“沒有運行analyze“的情況下,nn算法選擇循環(huán)p9plink)作為外循環(huán),因為4.9比5.2要小,結果就是選擇p-t路徑,即算法1。nn算法只是在每一步查找一個最佳選擇路徑,因此它完全忽略了這樣一個事實:5.2+4.4是比4.9+4.8性能稍稍有些好的規(guī)劃。然而n3算法對著兩個連接追蹤了5個最佳路徑,因此它最終選擇了t-p路徑,因為這條路徑的總體資源消耗要少一些。路徑t-p就是算法2。

注意: 如果運行了analyze,那么對資源消耗的評估就更加接近于現(xiàn)實,這樣nn和n3都選擇算法1。

(附注:最新的兩圖中對資源消耗的評估是下一代查詢規(guī)劃器使用以2為底的對數(shù)算法計算得出來的,而且與舊查詢規(guī)劃器相比假設的資源消耗稍微有些不同。因此,最后兩個圖中的資源消耗評估不能與tpc-h q8圖里的資源消耗評估進行比較。)

4.2 問題修正

對資源倉庫數(shù)據(jù)庫運行analyze可立即修復這類性能問題。然而,無論是否對資源倉庫是否進行分析,我們都要求fossil十分強壯,而且總是能夠快速地運行。基于這個原因,我們修改查詢使用cross join操作符而不使用常用的join操作符。sqlite將不會對cross join連接的表重新排序。這個功能是sqlite中長期都有的一個功能,做這么特別的設計就是允許具有豐富經(jīng)驗的開發(fā)人員能夠強制sqlite執(zhí)行特定的嵌套循環(huán)順序。一旦某個連接更改為(增加了一個關鍵字的)cross join這樣的連接,下一代查詢規(guī)劃器就不管是否使用analyze收集統(tǒng)計統(tǒng)計信息都強制選擇稍稍快一點的算法1。

我們說算法1快一些“,不過,嚴格來說這么說不準確。對一個常見的存儲倉庫運行算法1是快一些,不過,可能構建這樣一種資源倉庫:對資源倉庫的每一次提交都是提交給不同的名字唯一的分支上,而且所有的提交都是根提交的子提交。這種情況下,tagxref_i1與plink_i1相比就具有更多的可選項了,此時算法2才真正快一些。然而實際中這樣的資源倉庫極不可能出現(xiàn),所以使用cross join語法硬編碼嵌套循環(huán)的順序是解決這種情形下存在問題的適合方案。

5.0 避免或者修正查詢規(guī)劃器問題的方法一覽表

    不要驚慌!查詢規(guī)劃器選擇差的規(guī)劃這種情況實際上是非常罕見的。你未必會在應用中碰到這樣的問題。如果你沒有性能方面問題,那么你就不必為此而擔心。

    創(chuàng)建正確的索引。大多數(shù)sql性能問題不是因為查詢規(guī)劃器問題而引起的,而是因為缺少合適的索引。確保索引可以促進所有大型的查詢。大多數(shù)性能問題都可以使用一個或者兩個create index命令來解決,而不需要對應用代碼進行修改。

    避免創(chuàng)建低質量的索引。(用于解決查詢規(guī)劃器問題而創(chuàng)建的)低質量索引是這樣的索引:表里的索引最左一個字段具有相同值的行超過10行或者20行。特別注意,避免使用布爾字段或或者“枚舉類型”字段作為索引的最左一字段。

    這篇文章的前一段所說的fossil性能問題是因為tagxref表的tagxref_i1索引的最左一子段(tagid字段)具有相同值得項超過1萬。

    如果你一定要使用低質量的索引,那么請一定要運行analyze。只要查詢規(guī)劃器知道那個索引時低質量的,那么低質量的索引就不會讓它迷惑。查詢規(guī)劃器知曉低質量索引的方法是通過sqlite_stat1表的內容來實現(xiàn)的,這個表示有analyze命令計算得來的。

    當然,analyze只有在數(shù)據(jù)庫一開始就擁有非常大量的內容的情況下才能夠高效地運行。當你希望創(chuàng)建一個數(shù)據(jù)庫并累積了大量數(shù)據(jù)的時候,你可以運行命令analyze sqlite_master創(chuàng)建sqlite_stat1表,然后(使用常用的insert語句)向sqlite_stat1表中填入用來說明這樣的數(shù)據(jù)庫正適合你的應用的內容-也許這樣的內容是你在對實驗室的某個填寫的非常完美的模板數(shù)據(jù)庫運行analyze命令后所獲得的。

    編寫你自己的代碼。增加可以讓你快速且非常容易就能知道哪些查詢需要很多時間,這樣就只運行哪些特別不需要花太長時間的查詢。

    如果查詢可能使用沒有運行分析的數(shù)據(jù)庫上的低質量索引,那么請使用cross join語法,強制使用特定的嵌套循環(huán)順序。sqlite對cross join操作符進行特殊的處理,它強制左表為右表的外部循環(huán)。

    如果有其他方法實現(xiàn),那么就避免這么做,因為它與任何一個sql語言理念里的強大的優(yōu)點相抵觸,特別是應用開發(fā)人不需要了解查詢規(guī)劃。如果你使用了cross join,那么直到開發(fā)周期的后期你也要這么做,而且要在注釋里仔細地說明cross join是如何使用的,這樣以后才有可能把它去掉。在開發(fā)周期的早期就避免使用cross join,因為這么做是不成熟的優(yōu)化措施,也就是眾所周知的萬惡之源。

    使用單目運算符+,取消where子句某些限制條件。當對某個具體的查詢有更高質量的索引可以使用的時候,如果查詢規(guī)劃器仍然堅持選擇差質量的索引,那么請在where子句中謹慎地使用單目運算符+,這樣做就可以強制查詢規(guī)劃器不使用差質量的索引。如果可能的話,就盡量小心地添加這個這個運算符,而且尤其避免在應用開發(fā)的周期的早期就使用。特別要注意:給一個與類型密切相關的等號表達式增加單目運算符+可能更改這個表達式的結果。

    使用indexed by語法,強制有問題的查詢選擇特定的索引。同前兩個標題一樣,如果可能的話,盡量避免使用這個方法,尤其避免在開發(fā)的早期這么做,因為很清楚,它是一個不成熟的優(yōu)化措施。
6.0 結論

sqlite的查詢規(guī)劃器做這樣的工作做得非常好:為正在運行的sql語句選擇快速算法。對舊查詢規(guī)劃器來說,這是事實,對新的下一代查詢規(guī)劃器來說更是這樣。也許偶然會出現(xiàn)這樣的情況:由于信息不完整,查詢規(guī)劃器選擇了稍差的查詢規(guī)劃。 與使用舊查詢規(guī)劃器相比,使用下一代查詢規(guī)劃器這種情形就會更少出現(xiàn)了,不過仍然有可能出現(xiàn)。即便出現(xiàn)了這種極少出現(xiàn)的情況,應用開發(fā)人員需要做的是了解和幫助查詢規(guī)劃器做正確的事情。通常情況下,下一代查詢規(guī)劃器只是對sqlite做了一個新的增強,這種增強可以讓應用運行的更快些,而且不需要開發(fā)人員做更多的思考或者動作。

更多信息請查看技術文章
易賢網(wǎng)手機網(wǎng)站地址:詳解sqlite中的查詢規(guī)劃器
關于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點

版權所有:易賢網(wǎng)

亚洲免费不卡_在线视频精品_国产尤物精品_久久久久网址_久久精品91_欧美va天堂在线_狠狠入ady亚洲精品_亚洲午夜精品福利_国产精品草草_午夜精品久久99蜜桃的功能介绍
欧美日韩福利| 伊人久久成人| 国产精品va| 亚洲黄色一区| 亚洲欧美日韩在线观看a三区| 亚洲综合另类| 狠狠88综合久久久久综合网| 99亚洲精品| 欧美激情1区2区3区| 亚洲美女视频在线免费观看| 美脚丝袜一区二区三区在线观看| 黑人一区二区三区四区五区| 国产视频在线观看一区| 欧美69视频| 一本久久知道综合久久| 亚洲欧美一区在线| 国产日韩欧美一区二区| 欧美视频官网| 久久精品亚洲| 国产精品区二区三区日本| 欧美精品二区三区四区免费看视频| 亚洲国产综合在线看不卡| 麻豆精品传媒视频| av不卡在线| 欧美日韩理论| 欧美一区激情视频在线观看| 国产精品免费区二区三区观看| 国产精品对白刺激久久久| 久久国产精品亚洲va麻豆| 亚洲国产午夜| 狠狠色狠狠色综合人人| 久久精品亚洲| 免费毛片一区二区三区久久久| 在线成人www免费观看视频| 免费视频久久| 国产精品一区二区在线观看| 亚洲美女毛片| 日韩一级大片| 精品福利av| 在线成人亚洲| 激情综合电影网| 亚洲午夜精品久久| 黄色国产精品一区二区三区| 欧美精品一级| 国内精品99| 激情一区二区三区| 亚洲二区在线| a91a精品视频在线观看| 亚洲免费黄色| 国产精品久久久久久久久久妞妞| 99精品99| 国产精品亚洲欧美| 美脚丝袜一区二区三区在线观看| 男人的天堂亚洲在线| 久久精品天堂| 欧美日韩一区二区三| 午夜精品剧场| 在线免费高清一区二区三区| 日韩一级大片| 国产精品色网| 欧美1区3d| 亚洲黄色精品| 美女精品在线| 亚洲电影在线| 久久大香伊蕉在人线观看热2| 免费一级欧美片在线播放| 久久久久久国产精品mv| 欧美日韩在线精品一区二区三区| 精品二区久久| 欧美中文字幕| 亚洲第一区色| 久久婷婷国产综合尤物精品| 欧美午夜精品理论片a级大开眼界 欧美午夜精品久久久久免费视 | 欧美日韩精选| 亚洲青涩在线| 老司机免费视频久久| 黄色日韩在线| 亚洲欧美高清| 在线视频观看日韩| 六月婷婷久久| 日韩亚洲国产精品| 欧美激情视频一区二区三区在线播放| 激情久久一区| 欧美激情1区2区3区| 一本色道久久综合| 黄色av日韩| 欧美在线视屏| 亚洲中字在线| 国产日韩欧美一区二区| 欧美日韩免费| 久久看片网站| 国产精品视频久久一区| 欧美日韩亚洲一区三区| 免费在线亚洲欧美| 日韩午夜视频在线观看| 午夜精品一区二区在线观看 | 国产精品社区| 欧美日一区二区在线观看| 国产精品久久亚洲7777| 国模 一区 二区 三区| 久久精品一区| 亚洲欧美日韩国产一区| 99pao成人国产永久免费视频| 欧美日韩另类丝袜其他| 欧美 亚欧 日韩视频在线| 国产精品美女诱惑| 国产欧美大片| 亚洲视频二区| 国产欧美二区| 国产农村妇女精品一二区| 一本色道久久综合| 亚洲精品九九| 99在线|亚洲一区二区| 亚洲精品系列| 在线视频欧美一区| 一本久道久久综合狠狠爱| 亚洲精品日本| 国产欧美91| 亚洲一区三区电影在线观看| 亚洲欧美久久久| 麻豆精品传媒视频| 欧美91福利在线观看| 欧美成人tv| 国产在线不卡| 亚洲精品黄色| 国产美女诱惑一区二区| 免费不卡亚洲欧美| 欧美福利影院| 亚洲成人原创| 国产欧美一区二区三区另类精品 | 亚洲一区久久| 亚洲欧美日韩另类精品一区二区三区 | 亚洲国产欧洲综合997久久| 精品1区2区3区4区| 亚洲精品一级| 裸体丰满少妇做受久久99精品| 久久综合九色综合网站| 欧美午夜在线| av不卡免费看| 欧美一区免费视频| 亚洲精品1区2区| 美女国产精品| 在线播放亚洲| 久久男女视频| 精品999在线观看| 亚洲综合99| 国内揄拍国内精品久久| 国产日韩精品视频一区二区三区| 久久久国产亚洲精品| 精品91视频| 久久久久一区二区| 亚洲欧洲另类| 午夜视频一区| 国产毛片一区| 亚洲人成免费| 欧美性久久久| 免费看的黄色欧美网站| 一区在线观看| 欧美阿v一级看视频| 99re热精品| 国一区二区在线观看| 久久久www| 一本色道久久综合亚洲精品不| 女人天堂亚洲aⅴ在线观看| 91久久亚洲| 午夜久久tv| 久久精品观看| 国产伦精品一区二区三| 在线免费高清一区二区三区| 久久亚洲高清| 性刺激综合网| 国产模特精品视频久久久久| 在线成人黄色| 黄色成人精品网站| 欧美va天堂在线| 六月婷婷久久| 蘑菇福利视频一区播放| 国产女主播一区二区三区| 亚洲精选一区| 亚洲国产精品第一区二区| 欧美精品三区| 欧美日韩一区在线观看视频| 久久综合网络一区二区| 久久久噜噜噜久久狠狠50岁| 亚洲一区日本| 久久aⅴ乱码一区二区三区| av不卡免费看| 国产欧美一区二区三区国产幕精品| 国内揄拍国内精品久久| 欧美日本三区| 国产一区欧美| 亚洲网址在线| 91久久午夜| 夜夜爽www精品| 国产欧美一区二区三区国产幕精品| 亚洲激情啪啪| 99国产精品99久久久久久粉嫩| 在线日韩av| 中日韩视频在线观看| 国产精品一区二区在线观看| 亚洲综合激情| 欧美成人tv| 亚洲网站啪啪| 国产亚洲网站| 欧美阿v一级看视频| 韩国精品一区二区三区| 91久久亚洲| 久久aⅴ乱码一区二区三区| 欧美淫片网站| 亚洲第一网站| 亚洲欧美日本视频在线观看| 欧美在线国产| 亚洲毛片av| 久久久久久9| 伊人久久亚洲热| 亚洲一区三区在线观看| 欧美日韩国产在线一区| 亚洲精品三级| 久久九九99| 亚洲高清激情| 麻豆9191精品国产| 伊人久久大香线蕉av超碰演员| 一区二区三区欧美成人| 久久亚洲高清| 夜夜嗨av一区二区三区网站四季av| 国产亚洲欧美一区二区| 欧美激情1区2区3区| 99国产精品视频免费观看一公开 | 久久蜜桃资源一区二区老牛| 欧美日韩综合网| 99精品99久久久久久宅男| 久久综合狠狠| 国产欧美日韩一区| 国产精品xvideos88| 国产精品一二| 激情视频一区二区三区| 久久男女视频| 国产精品日本| 最近看过的日韩成人| 欧美1区2区| 亚洲欧美日韩一区在线观看| 在线欧美福利| 欧美日产一区二区三区在线观看| 国产一区二区三区奇米久涩| 亚洲手机视频| 欧美日韩国产免费观看| 久久九九免费| 免费久久久一本精品久久区| 亚洲精品欧洲| 亚洲高清不卡| 激情婷婷欧美| 极品av少妇一区二区| 你懂的网址国产 欧美| 香蕉久久久久久久av网站| 在线观看福利一区| 亚洲手机在线| 国内精品久久久久久久97牛牛| 玖玖在线精品| 女女同性女同一区二区三区91| 亚洲一区二区三区精品动漫| 日韩亚洲精品在线| 亚洲精品美女91| 亚洲精品1区| 亚洲日本欧美在线| 亚洲久色影视| 国产精品久久久免费| 国产一级精品aaaaa看| 国产欧美亚洲一区| 国产精品一区毛片| 亚洲欧美bt| 久久久久一区| 久久亚洲午夜电影| 欧美日韩国产亚洲一区| 国外成人免费视频| 亚洲另类黄色| 国产伦理一区| 狂野欧美性猛交xxxx巴西| 老司机午夜精品视频在线观看| 久久久久久久高潮| 国产精品地址| 在线成人欧美| 国产欧美精品久久| 久久九九精品| 国内久久视频| 国产一级久久| 欧美一区二区三区免费看| 欧美福利一区二区三区| 亚洲高清激情| 久久电影一区| 国内激情久久| 国产亚洲欧美一区二区| 你懂的亚洲视频| 亚洲日本视频| 狂野欧美一区| 99在线观看免费视频精品观看| 久久国产99| 亚洲激情黄色| 美女精品在线| 亚洲激情一区| 欧美激情91| 一区二区黄色| 国产精品啊啊啊| 先锋亚洲精品| 亚洲国产导航| 午夜久久一区| 亚洲一区二区三区高清不卡| 国产精品magnet| 老司机一区二区三区| 亚洲激情啪啪| 国产精品草草| 久久综合中文| 国产精品久久亚洲7777| 国产综合欧美| 欧美一区二区三区在线免费观看| 影音先锋在线一区| 欧美不卡在线| 鲁大师成人一区二区三区| 亚洲青涩在线| 亚洲视频高清| 欧美精品七区| 久久国产一区| 亚洲一区二区在线看| 影音先锋日韩资源| 欧美三级不卡| 欧美激情日韩| 久久一综合视频| 欧美专区18| 亚洲在线播放| 亚洲一区二区三区午夜| 日韩午夜av| 99国产精品久久久久老师| 国内一区二区在线视频观看| 欧美成熟视频| 午夜国产精品视频免费体验区| 亚洲欧美日韩国产综合精品二区| 99精品欧美一区二区三区| 亚洲黄色成人| 一区二区亚洲| 亚洲国产日韩欧美一区二区三区| 欧美日韩亚洲三区| 欧美午夜一区二区福利视频| 欧美一区二区三区四区夜夜大片| 鲁大师成人一区二区三区| 性一交一乱一区二区洋洋av| 午夜一区二区三区不卡视频| 免费在线成人av| 久久永久免费| 国产精品大片免费观看| 国产精品大片免费观看| 黑人巨大精品欧美一区二区小视频| 欧美区一区二| 亚洲一级黄色| 宅男噜噜噜66一区二区| 国产精品视频久久一区| 麻豆精品网站| 欧美成人嫩草网站| 亚洲小说欧美另类婷婷| 99日韩精品| 亚洲综合电影一区二区三区| 久久久久久久波多野高潮日日| 欧美亚洲自偷自偷| 欧美激情1区2区| 亚洲高清成人| 亚洲一区高清| 欧美日韩一区二区三| 亚洲精品一区二| 裸体一区二区| 红桃视频欧美| 翔田千里一区二区| 国产一区日韩欧美| 国产精品乱看| 欧美日韩在线不卡一区| 亚洲国产免费看| 久久久久国内| 亚洲久久一区| 欧美大片一区| 国产亚洲精品自拍| 国产一区二区三区自拍| 性欧美精品高清| 亚洲成色精品| 欧美极品一区| 亚洲制服av| 亚洲国产高清视频| 久久婷婷激情| 国产精品日韩精品欧美精品| 亚洲视频观看| 午夜精品剧场| 久久狠狠一本精品综合网| 亚洲黄页一区| 国产精品v亚洲精品v日韩精品 | 久热精品在线| 国产亚洲激情| 在线观看日韩av电影| 欧美一区二区三区在线播放| 一级成人国产| 在线精品一区二区| 欧美日韩福利| 欧美成人高清| 久久亚洲不卡| 久久亚洲风情|