数据库索引为什么会提高查询速度

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u014601583/article/details/79813834
索引通过事先排好序,从而在查找时可以应用二分查找等高效率的算法。
当数据量很大时,二者的效率相差极其悬殊。

举个例子:
表中有一百万条数据,需要在其中寻找一条特定id的数据。如果顺序查找,平均需要查找50万条数据。而用二分法,至多不超过20次就能找到。
展开阅读全文

如何提高查询速度

08-04

表TABLE有字段 ID,TITLE,BODY,QZrn其中QZ是数值代表权重的意思rnID做了主键rn已对TITLE和BODY做了全文索引rn数据量近百万rnrn需要达到的效果是:rn用户输入任意字符 如: 你好啊可爱的大熊猫rn由程序进行分词后进行全文检索. 如: 你好/啊/可爱/的/大熊猫rn排序规则是 rnTITLE包函完整字符串"你好啊可爱的大熊猫" 加200rnTITLE包函分词字符串如"你好" 加100rnBODY包函完整字符串"你好啊可爱的大熊猫" 加100rnBODY包函分词字符串如"你好" 加50rn最后再加上QZ进行倒序排列.rnrn我使用的SQL语句是:rn[code=SQL]rnselect top 1000 title,body,(case when contains(title,'"你好啊可爱的大熊猫"') then 200 else 0 end +case when contains(title,'"你好"') then 100 else 0 end |case when contains(title,'"可爱"') then 100 else 0 end+case when contains(title,'"大熊猫"') then 100 else 0 end + qz) as pm from table with(index(PK_webdata)) whererncontains(title,'"你好啊可爱的大熊猫"') or contains(title,'"你好"') or contains(title,'"可爱"') or contains(title,'"大熊猫"')rnorder by pm descrn[/code]rnrn查出的结果还算满意,就是查询的字符串越长速度越慢.如果把case when去了速度可以快很多.其实最终想达到的效果就是百度那样的样果.rnrn有以下几个问题:rn这个SQL语句是否合理,有没有更好的语句或方法可以达到类似效果.rn谁知道百度是怎么实现的,基本思路是什么,我只知道它是自已开发的数据库,不过原理应该差不多. 论坛

oracle 如何提高查询速度

04-28

在一个项目中用户登录要每次查询未读的信息,我写的未读信息存储过程如下:rnCREATE OR REPLACE PACKAGE returnPackage ASrn TYPE returnCursor IS REF CURSOR;rnEND returnPackage;rn/rn---------------------------------------------------------------------------------------------------rnCREATE OR REPLACE PROCEDURE listUnread(rn param_lgname IN VARCHAR2,rn param_r IN VARCHAR2,rn resultCursor OUT returnPackage.returnCursorrn) ASrn op_type_receive CHAR(1);rn lgname VARCHAR2(30);rnBEGINrn op_type_receive := TRIM(param_r);rn lgname := TRIM(param_lgname);rnrn OPEN resultCursor FORrn SELECT DISTINCTrn mb.dbid,rn mb.parentDbid,rn TRIM(mb.sender) AS sender,rn TRIM(mb.receipt) AS receipt,rn mb.type,rn mb.mailDate,rn mb.subject,rn mb.attachNumsrn FROMrn mailbox mbrn LEFT OUTER JOINrn groups gprn ONrn TRIM(gp.memberLoginName) = lgnamern LEFT OUTER JOINrn ts_op_stream oprn ONrn mb.dbid = op.dbid AND op.op_status = op_type_receivern WHERErn op.op_status IS NULLrn AND (rn TRIM(mb.receipt) = lgnamern ORrn TRIM(mb.receipt) = TRIM(gp.groupLoginName)rn ORrn INSTR(',' || TRIM(mb.receipt) || ',', ',' || lgname || ',') > 0rn ORrn INSTR(',' || TRIM(mb.receipt) || ',', ',' || TRIM(gp.groupLoginName) || ',') > 0rn )rn ORDER BY mailDate DESC;rnEND listUnread;rn/rn在很多用户登录的时候发现会很慢,我目前想创建索引来提高速度,如下:rncreate index mailbox_date on mailbox(mailDate desc);rn另外大家有没有好的方法来提高查询速度,多多指出,谢谢! 论坛

没有更多推荐了,返回首页