国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種創(chuàng)建數(shù)據(jù)庫(kù)索引的方法與流程

      文檔序號(hào):40239299發(fā)布日期:2024-12-06 17:04閱讀:18來(lái)源:國(guó)知局

      本發(fā)明屬于數(shù)據(jù)庫(kù)索引,具體涉及創(chuàng)建數(shù)據(jù)庫(kù)索引的方法。


      背景技術(shù):

      1、針對(duì)目前市面上的關(guān)系型數(shù)據(jù)庫(kù)(如oracle?sqlserver?mysql?pg等),對(duì)其建立非聚集索引(或者叫二級(jí)索引、輔助索引),并且力爭(zhēng)創(chuàng)建出來(lái)的索引是比較理想的,以便解決數(shù)據(jù)庫(kù)可能由于數(shù)據(jù)量大而引起的性能問(wèn)題,一個(gè)有效的好的索引非常重要,帶來(lái)的收益可以高于多個(gè)cpu的疊加效果,以及多個(gè)內(nèi)存疊加等方式帶來(lái)的硬件效果,索引時(shí)經(jīng)常出現(xiàn)的問(wèn)題有:1、在創(chuàng)建了索引的情況下,沒(méi)有使用該索引;2、雖然使用了相應(yīng)索引,但是消耗仍然非常大,時(shí)間消耗仍然非常長(zhǎng)。由此,需要?jiǎng)?chuàng)建一種有效并且高效的索引方式,以便提高數(shù)據(jù)庫(kù)的響應(yīng)性能。


      技術(shù)實(shí)現(xiàn)思路

      1、本發(fā)明的目的是提供創(chuàng)建數(shù)據(jù)庫(kù)索引的方法,用以解決現(xiàn)有技術(shù)中存在的上述問(wèn)題。

      2、為了實(shí)現(xiàn)上述目的,本發(fā)明采用以下技術(shù)方案:

      3、一種創(chuàng)建數(shù)據(jù)庫(kù)索引的方法,包括以下步驟:

      4、判斷sql語(yǔ)句的操作類(lèi)型是否需要建立索引:判斷sql語(yǔ)句的操作類(lèi)型,對(duì)操作類(lèi)型含有查詢、修改以及刪除含義的sql語(yǔ)句建立索引;

      5、識(shí)別sql語(yǔ)句的表連接類(lèi)型;

      6、識(shí)別表類(lèi)型,所述表類(lèi)型包括用戶表和系統(tǒng)表,提取用戶表的字段名;對(duì)所述系統(tǒng)表進(jìn)行忽略;所述字段名包括多種類(lèi)型的字段;所述字段包括:條件字段、分組排序字段、查詢展示字段及修改設(shè)置字段;

      7、根據(jù)預(yù)設(shè)的字段加入規(guī)則,確認(rèn)需要加入到索引的字段;

      8、根據(jù)所述表連接類(lèi)型對(duì)應(yīng)的預(yù)設(shè)的字段排序規(guī)則,對(duì)加入到索引的字段進(jìn)行排序,生成索引。

      9、進(jìn)一步的,預(yù)設(shè)的字段加入規(guī)則包括:

      10、獲取通過(guò)條件字段篩選過(guò)濾之后的行數(shù)量,判斷行數(shù)量是否大于預(yù)設(shè)閾值或行數(shù)量是否大于對(duì)應(yīng)表總行數(shù)百分比的預(yù)設(shè)值,若是,則將sql語(yǔ)句里面的所有字段都添加到索引里;若否,將條件字段添加到索引。

      11、進(jìn)一步的,預(yù)設(shè)的字段加入規(guī)則包括:

      12、獲取字段數(shù)量以及索引長(zhǎng)度,如果字段數(shù)量超過(guò)預(yù)設(shè)索引字段數(shù)量的限制,則依次按照條件字段、分組排序字段、查詢展示字段和/或修改設(shè)置字段的順序加入到索引。

      13、進(jìn)一步的,預(yù)設(shè)的字段加入規(guī)則包括:

      14、去除存在超過(guò)預(yù)設(shè)長(zhǎng)度的大字符字段;

      15、去除存在超過(guò)預(yù)設(shè)修改頻率的字段;

      16、如果整個(gè)查詢展示字段中的某個(gè)字段由于預(yù)設(shè)規(guī)則沒(méi)有添加到索引,則去除對(duì)應(yīng)的整個(gè)查詢展示字段;

      17、如果整個(gè)分組排序字段中的某個(gè)字段由于預(yù)設(shè)規(guī)則沒(méi)有添加到索引,則去除對(duì)應(yīng)的整個(gè)分組排序字段;

      18、如果整個(gè)修改設(shè)置字段的某個(gè)字段由于預(yù)設(shè)規(guī)則沒(méi)有添加到索引,則去除對(duì)應(yīng)的整個(gè)修改設(shè)置字段。

      19、進(jìn)一步的,預(yù)設(shè)的字段加入規(guī)則包括:將預(yù)設(shè)的界定為選擇性差的字段添加到索引。

      20、進(jìn)一步的,預(yù)設(shè)的字段加入規(guī)則包括:如字段類(lèi)型只有分組排序字段以及查詢展示字段,將所述分組排序字段以及查詢展示字段都添加到索引。

      21、進(jìn)一步的,根據(jù)所述表連接類(lèi)型對(duì)應(yīng)的預(yù)設(shè)的字段排序規(guī)則,對(duì)加入到索引的字段從左到右進(jìn)行排序,排序的方法包括:

      22、若sql語(yǔ)句中不存在分組排序字段,則進(jìn)行如下操作:

      23、創(chuàng)建出來(lái)的索引其字段從左到右依次為:第一字段、第二字段和剩余字段,

      24、所述第一字段包括等值條件字段中的全部或者部分字段和/或isnull條件字段中的全部或者部分字段,第一字段中的等值條件字段和isnull條件字段可以互相調(diào)換;

      25、所述第二字段是條件字段中過(guò)濾效果最好的范圍條件字段,過(guò)濾效果最好的范圍條件字段是根據(jù)預(yù)設(shè)的過(guò)濾效果判斷條件判斷得到;

      26、所述剩余字段是當(dāng)前sql語(yǔ)句中除了第一字段和第二字段后剩下的字段,所述剩余字段的多個(gè)字段之間的順序可以互相調(diào)換;

      27、第一字段是等值條件字段部分字段時(shí)和/或isnull條件字段的部分字段時(shí),記為a型第一字段;第一字段是等值條件字段全部字段時(shí)和/或isnull條件字段是全部字段時(shí),記為b型第一字段;

      28、設(shè)所述b型第一字段加上第二字段過(guò)濾得到的行數(shù)量為α,所述a型第一字段加上第二字段過(guò)濾得到的行數(shù)量為β,如果滿足β-α<γ,所述γ為第一預(yù)設(shè)閾值,則第一字段選用a型第一字段或選擇b型第一字段;如果不滿足,則第一字段選擇b型第一字段;

      29、若sql語(yǔ)句存在分組排序字段,則進(jìn)行如下操作:

      30、獲取sql語(yǔ)句中條件字段中的過(guò)濾效果優(yōu)等字段,所述過(guò)濾效果優(yōu)等字段是條件字段中滿足預(yù)設(shè)過(guò)濾要求的范圍條件字段;

      31、當(dāng)滿足以下條件時(shí):

      32、所述分組排序字段的第一個(gè)字段與所述過(guò)濾效果優(yōu)等字段中的某一字段相同;或

      33、第一字段過(guò)濾出來(lái)的行數(shù)量與加上所有的范圍條件字段之后過(guò)濾出來(lái)的行數(shù)量之間的差值小于第四預(yù)設(shè)閾值;或

      34、將分組排序字段的第一個(gè)字段緊跟在所述第一字段之后進(jìn)行查詢,獲取的行數(shù)量為c,將所述第二字段緊跟在所述第一字段之后進(jìn)行查詢,獲取的行數(shù)量為d,該sql所有字段過(guò)濾后的行數(shù)量e,若(c-d)/e小于等于j,j為第五預(yù)設(shè)閾值;

      35、則創(chuàng)建出來(lái)的索引字段從左到右依次為第一字段、分組排序字段和剩余字段;

      36、若不滿足,則創(chuàng)建出來(lái)的索引字段從左到右依次為第一字段、第二字段和剩余字段。

      37、進(jìn)一步的,根據(jù)所述表連接類(lèi)型對(duì)應(yīng)的預(yù)設(shè)的字段排序規(guī)則,所述表連接類(lèi)型包括單表連接類(lèi)型和多表連接類(lèi)型;當(dāng)表連接類(lèi)型為多表連接類(lèi)型時(shí),還進(jìn)行如下操作:

      38、若sql語(yǔ)句存在分組排序字段,且分組排序字段全是針對(duì)多張表中的某一張表x的字段時(shí);

      39、獲取每張表的本地條件字段過(guò)濾出來(lái)的行數(shù)量;

      40、判斷表x通過(guò)本地條件字段過(guò)濾出來(lái)的行數(shù)量與另一個(gè)相關(guān)聯(lián)的表通過(guò)本地條件字段過(guò)濾出來(lái)的行數(shù)量的差值是否小于等于第六預(yù)設(shè)閾值,若是,則選擇排序分組字段所在的表x作為入口表;所述入口表為多表連接查詢時(shí)采用嵌套循環(huán)時(shí)的驅(qū)動(dòng)表;

      41、當(dāng)表x通過(guò)本地條件字段過(guò)濾出來(lái)的行數(shù)量與另一個(gè)相關(guān)聯(lián)的表通過(guò)本地條件字段過(guò)濾出來(lái)的行數(shù)量的差值大于所述第六預(yù)設(shè)閾值,則按照下列規(guī)則進(jìn)行判斷:

      42、設(shè)分組排序字段所在的表通過(guò)本地條件字段過(guò)濾出來(lái)的行數(shù)量的值為m,另一個(gè)相關(guān)聯(lián)的表通過(guò)相應(yīng)的本地條件字段過(guò)濾出來(lái)的行數(shù)量的值為n,兩表關(guān)聯(lián)之后需要排序的行數(shù)量的值為g,

      43、當(dāng)(m-n)/g<h時(shí),h為預(yù)設(shè)值,選擇將分組排序字段所在的表作為入口表。

      44、分組排序字段所在的表通過(guò)本地條件字段過(guò)濾出來(lái)的行數(shù)量的值減去另一個(gè)相關(guān)聯(lián)的表通過(guò)本地條件字段過(guò)濾出來(lái)的行數(shù)量的值除以兩表關(guān)聯(lián)之后需要排序的行數(shù)量的值小于預(yù)設(shè)閾值,此時(shí)選擇將分組排序字段所在的表作為入口表。

      45、進(jìn)一步的,尋找第二字段時(shí),當(dāng)該索引的左側(cè)具有第一字段,需要將待判斷的范圍條件字段加上所述第一字段一起進(jìn)行搜索過(guò)濾,以此判斷范圍條件字段的過(guò)濾性;若多個(gè)范圍條件字段對(duì)應(yīng)的搜索過(guò)濾后的行數(shù)量之間相差小于第二預(yù)設(shè)閾值,則根據(jù)預(yù)設(shè)的字段選擇條件,選擇一個(gè)字段作為第二字段。

      46、進(jìn)一步的,對(duì)于剩余字段確定,如果剩余字段是屬于條件字段,那么應(yīng)該將該條件字段加入到索引里面去,當(dāng)所述條件字段對(duì)數(shù)據(jù)的過(guò)濾起不到作用,且其他sql語(yǔ)句對(duì)該字段進(jìn)行著超過(guò)預(yù)設(shè)頻率的修改時(shí),則不用將所述條件字段加入到索引里面去。

      47、有益效果:

      48、1、上述索引方法優(yōu)點(diǎn)是快速,只需要按照規(guī)則建立索引就行了,匹配規(guī)則之后,只會(huì)生成一個(gè)索引,不會(huì)生成大量的索引,對(duì)用戶數(shù)據(jù)庫(kù)的性能、磁盤(pán)空間等影響都非常??;已有的發(fā)明當(dāng)sql語(yǔ)句的過(guò)濾條件的字段數(shù)量較多時(shí),會(huì)產(chǎn)生大量的組合,理論上來(lái)講由于組合太多,不一定能夠真正的產(chǎn)生所有的組合,即使能夠產(chǎn)生,消耗的時(shí)間也是非常大的,體驗(yàn)上也是很不好的優(yōu)化索引創(chuàng)建:本發(fā)明通過(guò)對(duì)sql語(yǔ)句的操作類(lèi)型、連接類(lèi)型以及字段名進(jìn)行細(xì)致的分析和判斷,能夠更準(zhǔn)確地識(shí)別出需要建立索引的場(chǎng)合,從而優(yōu)化索引的創(chuàng)建過(guò)程,避免不必要的索引創(chuàng)建,提高數(shù)據(jù)庫(kù)的運(yùn)行效率。

      49、2、提高檢索效率:本發(fā)明創(chuàng)建的非聚集索引(二級(jí)索引、輔助索引)能夠更好地滿足復(fù)雜的查詢需求,提高數(shù)據(jù)的檢索效率,減少i/o操作,節(jié)省時(shí)間和資源。

      50、3、適應(yīng)大規(guī)模數(shù)據(jù):本發(fā)明的索引創(chuàng)建方法能夠更好地應(yīng)對(duì)大規(guī)模數(shù)據(jù),通過(guò)優(yōu)化索引結(jié)構(gòu),避免因數(shù)據(jù)量過(guò)大導(dǎo)致的數(shù)據(jù)庫(kù)性能下降,提高數(shù)據(jù)庫(kù)的穩(wěn)定性和可靠性。

      51、4、充分利用硬件資源:本發(fā)明的索引創(chuàng)建方法能夠更好地利用多核cpu和大容量?jī)?nèi)存,通過(guò)優(yōu)化數(shù)據(jù)庫(kù)系統(tǒng)的資源利用率,進(jìn)一步提升數(shù)據(jù)庫(kù)的性能。

      52、5、降低維護(hù)成本:本發(fā)明的索引創(chuàng)建方法能夠減少無(wú)效的索引創(chuàng)建,降低數(shù)據(jù)庫(kù)的維護(hù)成本,提高數(shù)據(jù)庫(kù)的使用效益。

      當(dāng)前第1頁(yè)1 2 
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1