日期:2014-05-19  浏览次数:20569 次

高分在线急求一sql语句优化
select     *   from   table1   where   (biaoti   like   '%兼% '   or   neirong   like   '%兼% ')  

biaoti   是nvarchar
neirong   是ntext

这是个站内搜索功能

表中数据10万左右,查询非常的慢了  
请问各位大虾   有办法优化吗?


------解决方案--------------------
好像没有- -,你这个匹配度太低了
------解决方案--------------------
全文检索吧
------解决方案--------------------
这个语句似乎建索引也没用
------解决方案--------------------
http://www.microsoft.com/china/msdn/archives/library/dnsql2k/html/sql_fulltextsearch.asp

全文检索吧

------解决方案--------------------
既然是在网页里分页显示,每页检索的时候都是
select top n * from table1 where (biaoti like '%兼% ' or neirong like '%兼% ')
行了。
呵呵,纯属歪招。
------解决方案--------------------
这个语句似乎建索引也没用
--------------------------
1:不能在NTEXT类型上建索引
2:字段 LIKE '%...%这样的语句本身也引用不了索引(即使字段有索引的话),除非是 LIKE '...% '
------解决方案--------------------
ntext用like搜索肯定很慢。而且索引对like是效果的。现在这样只能是用全文索引了。不过全文索引是需要权限的。一般的虚拟主机不会给这个权限你。
------解决方案--------------------
先创建全文索引
然后执行:
select * from table1 where contains(biaoti, ' "兼 " ')
union all
select * from table1 where contains(neirong, ' "兼 " ')
------解决方案--------------------
先创建全文索引
再把like 换用charindex
这样会快些
------解决方案--------------------
==
------解决方案--------------------
是自己的服务器就好办很多了。先用企业管理器建全文索引,具体操作可以上网查询很多的。然后把 biaoti like '%兼% ' or neirong like '%兼% ' 换成contains(biaoti, '兼 ') or contains(neirong, '兼 ') 如果你想查询范围广一点的话,可以用contains(biaoti, '*兼* ') or contains(neirong, '*兼* '),*相当like 的 %

------解决方案--------------------
up
------解决方案--------------------
创建全文索引速度会提升很多,但是SQL的全文也是很糟糕的,尤其分词。
但是对于楼主的需要建个全文索引已经够用了
------解决方案--------------------
对于biaoti、neirong2个字段建分词索引字段
进行全文填充,然后查询即可

hxd001_810(寒冬)写的麻烦了
select * from table1 where contains(*, ' "兼 " ') 就可以

------解决方案--------------------
不过全文索引查询和like搜索是不一样的,楼主要记得,这个是分词后的索引查询
并不是所有 有“兼”字的都查询出来,“兼任”这个词语在全文查询中是查不出来的