锁定老帖子 主题:like 模糊查询
精华帖 (1) :: 良好帖 (0) :: 新手帖 (15) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-04-28
topcode 写道 qingfengjushi1 写道 这样设计库表似乎不太合理, 第一范式都不满足。
难道所有的东西都一定要满足三范式吗. 特殊情况下需要取舍的吧 是,但这种情况下,确实有必要怀疑表设计是否合理了。 |
|
返回顶楼 | |
发表时间:2010-04-28
只能当练习用!!一般开发很难遇到吧!!在说表设计不合理吧!!
|
|
返回顶楼 | |
发表时间:2010-04-28
数据库记录太多,一把就死了!
|
|
返回顶楼 | |
发表时间:2010-04-28
xxjglobal 写道 不错,经测试 在sqlserver中没有问题
在oracle中应该为 select * from Table where ','||columA||',' like '%,111,%' mysql 中也是这样。 |
|
返回顶楼 | |
发表时间:2010-04-28
select * from auction where ',' || auction_name || ',' like '%,111,%';
|
|
返回顶楼 | |
发表时间:2010-04-28
全表扫描,索引直接废了……谁还敢用?
|
|
返回顶楼 | |
发表时间:2010-04-28
ysen 写道 myy 写道 不错,考虑得很周到,不过这样效率比较低,记录数太多会很慢。
有什么更好的解决办法没啊? 可以考虑在保存时前后各增加一个逗号(,),模糊查询语句修改为 select * from Table where columA like '%,111,%'。 |
|
返回顶楼 | |
发表时间:2010-04-28
二点,
1,低级问题,懂sql的谁都会注意 2,这问题常见,啥全表扫描啊,难道就这一字段过滤啊, |
|
返回顶楼 | |
发表时间:2010-04-29
妙!这个问题以前还没想过
|
|
返回顶楼 | |
发表时间:2010-04-29
ysen 写道
逗号,在sql中like中不需要转义,但是如果 用传统的like '%111%',显然不合适,这样虽然111不存在但是依然能查到该条记录。 like本身效率就比较低,应该尽量避免查询条件使用like;对于like ‘%...%’(全模糊)这样的条件,是无法使用索引的,全表扫描自然效率很低;另外,由于匹配算法的关系,模糊查询的字段长度越大,模糊查询效率越低。 解决办法:首先尽量避免模糊查询,如果因为业务需要一定要使用模糊查询,则至少保证不要使用全模糊查询,对于右模糊查询,即like ‘…%’,是会使用索引的;左模糊like ‘%...’无法直接使用索引,但可以利用reverse + function index 的形式,变化成 like ‘…%’;全模糊是无法优化的,一定要的话考虑用搜索引擎。出于降低数据库服务器的负载考虑,尽可能地减少数据库模糊查询。 |
|
返回顶楼 | |