版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
聯(lián)系人的查找和SQL一,聯(lián)系人的部分表結構與查
-----簡單的說,聯(lián)系人的數(shù)據(jù)不是單一的在某一個表中。在android中,增加了賬號以。,表data了聯(lián)系人(每個聯(lián)系人其實是個賬戶)的20多項數(shù)據(jù),比如,號碼,類型和號碼(零個或多個)在同一列中,由類型(共有9種類型:郵件, 。,表raw_contacts了聯(lián)系人的賬號名稱,賬戶類型,顯示的名字,排序關鍵字等20data.raw_contact_idraw_contacts._id關聯(lián)起來。在表的創(chuàng)建語句CREATETABLEdata****,raw_contact_idINTEGERREFERENCESNOTNULL,表name_lookup了查找聯(lián)系人的一些匹配信息。它包括4data_id:data表的_idraw_contacts_id:raw_contacts表的_idnormalized_name:二,name_lookup表的1android中有一個特殊的類:HanziToPinyin。顧名思義,他能將一串漢字(比如:張三)以及漢字與字母、數(shù)字、特殊字符(比如:ab*#)轉換成拼音(非漢字的字符保持不publicstaticclassTokenpublicstaticfinalStringSEPARATOR="publicstaticfinalintLATIN=1;publicstaticfinalintPINYIN=2;publicstaticfinalintUNKNOWN=3;publicToken(){}publicToken(inttype,Stringsource,Stringtarget){this.type=type;this.source=source;this.target=target;}publicinttype;publicStringsource;publicStringtarget;}publicArrayList<Token>get(finalStringinput)字,保存在一個ArrayList中。 2ArrayListlist1。list1Token的數(shù)據(jù)是:typeToken.PINYINsource=張target=list1Token的數(shù)據(jù)是:type=Token.PINYINsource=target=又如get(“ab*#”),這個將會返回具有6個元素的ArrayList,list2list21256個Token的數(shù)據(jù)是:type=Token.LATINsource=a b, *, target=a b, *, 也就是對于這些數(shù)字,字母,特殊符號就返回其本身。)list234個Tokenlist1的數(shù)據(jù)一致。2,接下來是要將解析后的數(shù)據(jù)存入表name_lookup中了(我們修改后的數(shù)據(jù))對于一個名字“李四”,解析后是“zhangsanlisi”si、lsi、slsi、zslsi:用于拼音的首拼查找,注意會最后一個字的全拼lisi,sanlisi,zhangsanlisi數(shù)字 65474:用于數(shù)字的全拼查找name_lookupandroid2.2Table如下語句(SQLLEFTOUTERJOIN ON(_id=presence_contact_id)LEFTOUTERJOIN ASON(status_update_id=contacts_status_updates.status_update_data_id)contact_idASsnippet_contact_id,data._idASsnippet_data_id,data1ASsnippet_data1,data2ASsnippet_data2,data3ASsnippet_data3,data4AS(SELECTmimetypeFROMmimetypesWHERE_id=mimetype_id)ASdataJOINraw_contactsON (data.raw_contact_id=raw_contacts._id)data._idIN(SELECTFROMname_lookupJOINraw_contactsON(raw_contacts._id=name_lookup.raw_contact_id)WHEREnormalized_nameGLOB'297E *'ANDname_typeIN(2,4,3,6,5,7)GROUPBY))ON,其中view_contacts_restricted也是是一個非常復雜的視圖。agg_presence是在內(nèi)存中的一個關于聚合的表。normalized_nameGLOB'297E *'中的'297E LE1000個10+的。二、聯(lián)系人查找的優(yōu)化:從10多秒到幾十SQLselectx,x,x,x,fromdata,raw_contacts,name_lookupwhere這個語句雖然非常簡單,但是它會執(zhí)行一次3個表的乘積,非常耗時。raw_contacts.contact_idAS_id,raw_contacts.sort_key_altASsort_key_alt,_data.data1as on(raw_contacts._id _data.mimetype_id=(selectdistinctraw_contact_idas wherenormalized_nameGLOB'2982*'name_type)(raw_contacts._id= andraw_contacts.deleted<>1經(jīng)過優(yōu)化這個查詢語句只需要4S左右的時間了,但是不能滿足我們的raw_contacts.contact_idAS_id,raw_contacts.sort_key_altASsort_key_alt,_data.data1as(selectdistinctraw_contact_idas wherenormalized_nameGLOB'2982*'name_type)(raw_contacts._id= andraw_contacts.deleted<>1 on(raw_contacts._id _data.mimetype_id=這下時間又減少了一點。不過還有優(yōu)化的空間,注意到這個語句,name_typeIN(2,4,3,6,5,7) 這個語句其實很糟糕,應該把IN轉換成對應的OR,但是我們又發(fā)現(xiàn)里面的數(shù)字的規(guī)律性可以將其寫為更高效的name_type>=2andraw_contactsdata20多列的數(shù)據(jù),查詢時,數(shù)據(jù)處理需
raw_contacts.contact_idAS_id,_data.data1asselectdistinctraw_contact_idas wherenormalized_nameGLOB'2982*'AND(name_type>=2andname_type<=7))join(select_id,dis fromwhereraw_contacts.deleted<>1) (raw_contacts._id=name_lookup_idjoin raw_contact_id,data1fromdatawheredata.mimetype_id=on(raw_contacts._id _data.raw_contact_id)行數(shù)較小的放面做運算。經(jīng)過這樣的優(yōu)化,查詢的所需的時間僅為800MS了.,。3,800MS的查詢,在使用的時候感覺有點遲鈍需要優(yōu)化,從頭到(index,。name_lookup的查詢列:normalized_name個列上會有比較多的重復的數(shù)據(jù),可惜的是不支持聚簇索引這個特性androidname_lookup(1)CREATEINDEXname_lookup_raw_contact_id_indexONname_lookup(2)CREATEINDEXname_lookup_indexONname_lookup(normalized_name,name_type,raw_contact_id,data_id);1)db.execSQL("DROPINDEXIFEXISTSname_lookup_index");INSERTORIGNOREINTOname_lookup(data_idraw_contact_id,normalized_name,name_type)1350毫秒!這個已經(jīng)非常快了。對于一個組合索引如果一個T語句的WERE句中了組合索引的全部列或列開始且連續(xù)的部分列將有助于提高此查詢的性能因此索引定義中列的順是很重要的。大體上說,經(jīng)常的列或選擇性較大的列應該放面。同上面介紹的名字方法一樣,存入name_lookup表中。但是這樣做會在表余。對于這個功能,我們只需要修改上面的查詢語句即可。phone_lookup2列:raw_contact_id,以及normalized_number(反序后的,使用SQL的UNION關鍵字,將SQL語句改為:raw_contacts.contact_idAS_id,_data.data1as distinct as wherenormalized_nameGLOB'2982*'AND(name_type>=2and distinctraw_contact_idasname_lookup_idfromphone_looku
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版房地產(chǎn)銷售代理授權委托合同3篇
- 二零二五年度物流倉儲中心臨時搬運工勞動合同書4篇
- 2025版學校游泳池配套設施租賃與管理承包合同示范2篇
- 二零二五版藝術品拍賣師傭金分成合同3篇
- 個性化離婚合同與起訴狀套裝2024版版B版
- 二零二五年度健康管理與養(yǎng)老服務業(yè)合作協(xié)議3篇
- 二零二五年度圖書封面及插圖設計合同4篇
- 2025年度停薪留職勞動合同范本創(chuàng)業(yè)支持版
- 二零二五年度農(nóng)產(chǎn)品市場推廣合作合同范本
- 2025年度木材行業(yè)綠色認證交易合同范本3篇
- 山東鐵投集團招聘筆試沖刺題2025
- 真需求-打開商業(yè)世界的萬能鑰匙
- 2025年天津市政集團公司招聘筆試參考題庫含答案解析
- GB/T 44953-2024雷電災害調(diào)查技術規(guī)范
- 2024-2025學年度第一學期三年級語文寒假作業(yè)第三天
- 2024年列車員技能競賽理論考試題庫500題(含答案)
- 心律失常介入治療
- 6S精益實戰(zhàn)手冊
- 展會場館保潔管理服務方案
- 監(jiān)理從業(yè)水平培訓課件
- 廣東省惠州市實驗中學2025屆物理高二第一學期期末綜合測試試題含解析
評論
0/150
提交評論