开发android22人的查找和优化_第1页
开发android22人的查找和优化_第2页
开发android22人的查找和优化_第3页
开发android22人的查找和优化_第4页
开发android22人的查找和优化_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

联系人的查找和SQL一,联系人的部分表结构与查

-----简单的说,联系人的数据不是单一的在某一个表中。在android中,增加了账号以。,表data了联系人(每个联系人其实是个账户)的20多项数据,比如,号码,类型和号码(零个或多个)在同一列中,由类型(共有9种类型:邮件, 。,表raw_contacts了联系人的账号名称,账户类型,显示的名字,排序关键字等20data.raw_contact_idraw_contacts._id关联起来。在表的创建语句CREATETABLEdata****,raw_contact_idINTEGERREFERENCESNOTNULL,表name_lookup了查找联系人的一些匹配信息。它包括4data_id:data表的_idraw_contacts_id:raw_contacts表的_idnormalized_name:二,name_lookup表的1android中有一个特殊的类:HanziToPinyin。顾名思义,他能将一串汉字(比如:张三)以及汉字与字母、数字、特殊字符(比如: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的数据是:typeToken.PINYINsource=张target=list1Token的数据是:type=Token.PINYINsource=target=又如get(“ab*#”),这个将会返回具有6个元素的ArrayList,list2list21256个Token的数据是:type=Token.LATINsource=a b, *, target=a b, *, 也就是对于这些数字,字母,特殊符号就返回其本身。)list234个Tokenlist1的数据一致。2,接下来是要将解析后的数据存入表name_lookup中了(我们修改后的数据)对于一个名字“李四”,解析后是“zhangsanlisi”si、lsi、slsi、zslsi:用于拼音的首拼查找,注意会最后一个字的全拼lisi,sanlisi,zhangsanlisi数字 65474:用于数字的全拼查找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是在内存中的一个关于聚合的表。normalized_nameGLOB'297E *'中的'297E LE1000个10+的。二、联系人查找的优化:从10多秒到几十SQLselectx,x,x,x,fromdata,raw_contacts,name_lookupwhere这个语句虽然非常简单,但是它会执行一次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经过优化这个查询语句只需要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=这下时间又减少了一点。不过还有优化的空间,注意到这个语句,name_typeIN(2,4,3,6,5,7) 这个语句其实很糟糕,应该把IN转换成对应的OR,但是我们又发现里面的数字的规律性可以将其写为更高效的name_type>=2andraw_contactsdata20多列的数据,查询时,数据处理需

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)行数较小的放面做运算。经过这样的优化,查询的所需的时间仅为800MS了.,。3,800MS的查询,在使用的时候感觉有点迟钝需要优化,从头到(index,。name_lookup的查询列:normalized_name个列上会有比较多的重复的数据,可惜的是不支持聚簇索引这个特性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毫秒!这个已经非常快了。对于一个组合索引如果一个T语句的WERE句中了组合索引的全部列或列开始且连续的部分列将有助于提高此查询的性能因此索引定义中列的顺是很重要的。大体上说,经常的列或选择性较大的列应该放面。同上面介绍的名字方法一样,存入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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论