查看: 5980|回复: 23

[SQL] 【讨论】求更高效的关键词匹配SQL

[复制链接]
论坛徽章:
6
2014年新春福章
日期:2014-02-18 16:44:08马上有对象
日期:2014-02-18 16:44:08优秀写手
日期:2015-01-13 06:00:15优秀写手
日期:2015-02-12 06:00:142015年新春福章
日期:2015-03-04 14:53:162015年新春福章
日期:2015-03-06 11:58:39
发表于 2015-1-6 11:37 | 显示全部楼层 |阅读模式
应用场景:
一个小型的论坛里面,大约有 1 万  多篇文章,想在网页上输入“关键词”,查找出文章标题或文章内容中含有该关键词的文章。
如何写效率高的SQL语句?


表的设计如下:
create table article(          --文章表article
id int primary key,           --文章id号,主键
title varchar(20),             --文章标题
content varchar(1000),    --文章内容
publishdate date,            --发布时间
userid int                       --作者id
)

本人写的SQL如下:
select distinct id, title, publishdate, userid     ---显示符合要求文章的id,标题,发表时间及作者id号
from article
where title like '%关键词%' or content like '%关键词%';


请教高手,这个SQL如何进行优化?
谢谢~



求职 : 数据库管理员
认证徽章
论坛徽章:
11
ITPUB社区千里马徽章
日期:2013-06-09 10:15:34懒羊羊
日期:2015-03-04 14:52:11懒羊羊
日期:2015-02-10 13:36:05马上有对象
日期:2015-02-02 12:29:02红宝石
日期:2015-01-19 09:44:10马上有车
日期:2014-11-11 14:16:07马上有车
日期:2014-03-27 15:59:39优秀写手
日期:2014-03-12 06:00:13马上有钱
日期:2014-02-18 16:43:092014年新春福章
日期:2014-02-18 16:43:09
发表于 2015-1-6 12:20 | 显示全部楼层
左右都有,,或者试试instr?

使用道具 举报

回复
论坛徽章:
737
季节之章:春
日期:2015-07-31 17:16:29ITPUB季度 技术新星
日期:2014-07-17 14:37:00季节之章:秋
日期:2015-07-31 17:16:14季节之章:夏
日期:2015-07-31 17:16:29股神
日期:2014-10-15 09:23:31衰神
日期:2014-10-20 22:47:12季节之章:冬
日期:2015-07-31 17:16:14红钻
日期:2014-12-16 17:51:41洛杉矶湖人
日期:2016-09-23 08:18:15布鲁克林篮网
日期:2016-09-23 08:17:18
发表于 2015-1-6 12:47 来自手机 | 显示全部楼层
Instr 函数索引

使用道具 举报

回复
论坛徽章:
0
发表于 2015-1-6 13:13 | 显示全部楼层
专业的我都不懂,看长姿势的~~你们的用的手机支不支持天天root的?

使用道具 举报

回复
论坛徽章:
6
2014年新春福章
日期:2014-02-18 16:44:08马上有对象
日期:2014-02-18 16:44:08优秀写手
日期:2015-01-13 06:00:15优秀写手
日期:2015-02-12 06:00:142015年新春福章
日期:2015-03-04 14:53:162015年新春福章
日期:2015-03-06 11:58:39
 楼主| 发表于 2015-1-6 15:59 | 显示全部楼层
oracle_cj 发表于 2015-1-6 12:47
Instr 函数索引

select distinct id, title, publishdate, userid     ---显示符合要求文章的id,标题,发表时间及作者id号
from article
where ((instr(title,'关键词'))>0) or ((instr(content,'关键词'))>0)

只是在 where后面的表达式改成 instr,这样效率能提高多少啊?

使用道具 举报

回复
论坛徽章:
737
季节之章:春
日期:2015-07-31 17:16:29ITPUB季度 技术新星
日期:2014-07-17 14:37:00季节之章:秋
日期:2015-07-31 17:16:14季节之章:夏
日期:2015-07-31 17:16:29股神
日期:2014-10-15 09:23:31衰神
日期:2014-10-20 22:47:12季节之章:冬
日期:2015-07-31 17:16:14红钻
日期:2014-12-16 17:51:41洛杉矶湖人
日期:2016-09-23 08:18:15布鲁克林篮网
日期:2016-09-23 08:17:18
发表于 2015-1-6 16:02 | 显示全部楼层
你建个索引试试啊,我又不知道你具体什么情况

使用道具 举报

回复
论坛徽章:
6
2014年新春福章
日期:2014-02-18 16:44:08马上有对象
日期:2014-02-18 16:44:08优秀写手
日期:2015-01-13 06:00:15优秀写手
日期:2015-02-12 06:00:142015年新春福章
日期:2015-03-04 14:53:162015年新春福章
日期:2015-03-06 11:58:39
 楼主| 发表于 2015-1-6 16:47 | 显示全部楼层
oracle_cj 发表于 2015-1-6 16:02
你建个索引试试啊,我又不知道你具体什么情况

搜索的字段只有 文章标题title 和文章内容content 两个字段。

建立索引,只能对 title建立索引了。

使用道具 举报

回复
论坛徽章:
8
奥运会纪念徽章:自行车
日期:2012-07-30 15:04:15奥运会纪念徽章:水球
日期:2012-08-22 11:52:38奥运会纪念徽章:皮划艇激流回旋
日期:2012-09-03 11:01:53现代
日期:2013-09-09 11:38:05雪佛兰
日期:2013-09-30 14:52:08优秀写手
日期:2014-03-07 06:00:14沸羊羊
日期:2015-03-04 14:53:522015年新春福章
日期:2015-03-06 11:58:39
发表于 2015-1-6 17:13 | 显示全部楼层
这样效率很低下,一定要使用oracle吗。
其实这种搜索用lucene更快

使用道具 举报

回复
认证徽章
论坛徽章:
40
2014年新春福章
日期:2014-02-18 16:43:09喜羊羊
日期:2015-05-18 16:24:25慢羊羊
日期:2015-06-12 13:08:22暖羊羊
日期:2015-07-02 16:06:20暖羊羊
日期:2015-07-06 16:28:55狮子座
日期:2015-07-29 17:14:43摩羯座
日期:2015-09-02 13:58:47白羊座
日期:2015-09-08 10:39:06天枰座
日期:2015-09-17 21:41:53摩羯座
日期:2015-10-29 21:07:02
发表于 2015-1-6 17:34 | 显示全部楼层
由于涉及“文章内容”,该字段的长度一定不小。这种情况下,我认为应该创建全文索引。

使用道具 举报

回复
论坛徽章:
6
2014年新春福章
日期:2014-02-18 16:44:08马上有对象
日期:2014-02-18 16:44:08优秀写手
日期:2015-01-13 06:00:15优秀写手
日期:2015-02-12 06:00:142015年新春福章
日期:2015-03-04 14:53:162015年新春福章
日期:2015-03-06 11:58:39
 楼主| 发表于 2015-1-7 09:26 | 显示全部楼层
晕逍遥 发表于 2015-1-6 17:13
这样效率很低下,一定要使用oracle吗。
其实这种搜索用lucene更快

Oracle,


搞了半天才知道,这个论坛系统用的  Access 数据库?




不知道 Access数据库 在 SQL优化 方面是否跟其他数据库一样?


使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表