怎么样提高tag查询sql的效率? 文章表有个保存标签的字段logtag,内容格式是这样的:tag1,tag2,tag3目前用like来查询效率很低:logtag like '%tag1%' 怎么样写sql效率高? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不如间个索引create index IX_log on tb(logtag) 试试select * from tb where (',tag1,',','+logtag+',')>0 加了索引like '%tag1%'这样也作用不大的,如果是like 'tag1%'这样才有用. select * from tb where charindex(',tag1',logtag)>0 如果有索引的话 把logtag like '%tag1%' 改成logtag like 'tag1%' 如果没有索引就凑合用这个charindex(',tag1',logtag)>0 是不是少了charindex函数名,哈哈select * from tb where charindex('tag1',logtag)>0 logtag like '%tag1%' --如果你用这个,不如用charindex来判断 多谢这位兄弟提醒,偶大意了,改正如下:select * from tb where charindex(',tag1,',','+logtag+',')>0 charindex比like '%tag1%' 要好。 一般情况下:like %af%是表扫用不了索引,字段长度直接影响耗时呀like 'asdfafd%' 索引扫描条件中对列使用函数也可能用不到索引 用全文的话要空间 locate(',tag1,',','+logtag+',')>0我这样用了,好象要好一点,mysql的locate等同于mssql的charindex, 应该再建一个表字段为:tag名(或id),文章id 这样不是很麻烦?1.添加文章要搜索整个tag表然后添加进新文章的id,2.特别是修改文章的tag,要添加修改后的文章id到tag表里面,同时要删除原tag表里的文章id,3.删除文章又要删除tag里所有该文章的id,4.一个tag可能有几百篇文章用,那就要保存几百篇文章的id,文章id已经到5位数了,那这个tag表会不会很大? 格式是这样的tag1,tag2,tag3 用logtag like 'tag1%' 是精确匹配前面的,那后面的tag2,tag3不是查询不到了? 建议用这样吧select * from tb where charindex(',tag1,',','+logtag+',')>0 1、为什么要搜索tag表?直接添加文字id-tag1、文字id-tag2、。不就行了2、3、要删除原tag表里的文章id对应的所有记录,很简单4、这种简单的表,索引很容易实现,记录数大不会有什么问题(查询慢不了,插入时略慢) 为什么charindex 比 like 高效? sql累计求和问题 哪位好心人帮我这个sql语句从一个表变成2个表,在线等,谢谢啦 sql题目 如何判断表中是否存在自动递增列? 求教:如何设计一个系统中的表结构 启动作业后,为什么它的状态还是为‘不在运行’呢? 数据库主机和客户端配置 如何恢复数据库,只有一个mdf文件 程序实现SQL SERVER备份恢复中碰到的小问题,请教各位高手啦!!回者有分!! 急急急!!!救命啊~~!!阵列坏了,只有前一天的完整数据备份,可是恢复时报‘一致性错误’?? CDB文件为何种数据库文件,如何导入SQLSERVER中--在线等!!谢谢 sql查询问题
create index IX_log on tb(logtag)
如果有索引的话 把logtag like '%tag1%' 改成logtag like 'tag1%'
如果没有索引就凑合用这个charindex(',tag1',logtag)>0
select * from tb where charindex('tag1',logtag)>0
select * from tb where charindex(',tag1,',','+logtag+',')>0
like 'asdfafd%' 索引扫描
条件中对列使用函数也可能用不到索引
用全文的话要空间
字段为:tag名(或id),文章id
1.添加文章要搜索整个tag表然后添加进新文章的id,
2.特别是修改文章的tag,要添加修改后的文章id到tag表里面,同时要删除原tag表里的文章id,
3.删除文章又要删除tag里所有该文章的id,
4.一个tag可能有几百篇文章用,那就要保存几百篇文章的id,文章id已经到5位数了,那这个tag表会不会很大?
用logtag like 'tag1%' 是精确匹配前面的,那后面的tag2,tag3不是查询不到了?
建议用这样吧
select * from tb where charindex(',tag1,',','+logtag+',')>0
2、3、要删除原tag表里的文章id对应的所有记录,很简单
4、这种简单的表,索引很容易实现,记录数大不会有什么问题(查询慢不了,插入时略慢)