mysql语句不使用like%%还能使用什么
在新浪云平台上面收到这样的建议,请大神帮分析一下。您好请尽快优化应用的SQL不要有like'%%',也不要在sql语句中做运算或者字符的拼接等等目前应用已经被禁用了,修改...
在新浪云平台上面收到这样的建议,请大神帮分析一下。
您好 请尽快优化应用的SQL 不要有like '%%',也不要在sql语句中做运算或者字符的拼接等等 目前应用已经被禁用了,修改完成后才应用才能使用
问题
1:不使用like能使用什么进行模糊搜索?
2:什么是在sql中做运算和字符拼接? 展开
您好 请尽快优化应用的SQL 不要有like '%%',也不要在sql语句中做运算或者字符的拼接等等 目前应用已经被禁用了,修改完成后才应用才能使用
问题
1:不使用like能使用什么进行模糊搜索?
2:什么是在sql中做运算和字符拼接? 展开
4个回答
展开全部
1.不用like,不知你那是一个什么列,如果是不太长的字符串列,可以考虑建立一个手工的哈希索引,就是把那个原本要搜索的列转换为crc32()后的一串数字,然后再搜索的时候用 = crc32('keyword'), 这个是优化的一种方法,效率比like好很多
如果只是字符左端或者右端是要查找的重点 可以用left()或者right() 截取一部分来查找 还是用 =
如果是text的列,那只能用全文索引了
2.字符拼接?你是不是用了CONCAT('xx','xx')这个函数?这个就是把字符串拼起来的函数
运算应该就是简单的加减乘除运算吧,或者有NOW()之类的函数,在简单的sql查询里也不可能进行太复杂的运算操作。他提这点,应该是你的语句使mysql不能使用查询缓存,导致效率低
新浪的意思大概就是你的sql效率太低,需要优化,你可以看看sql语句,有哪些优化的地方,优化优化就好了
如果只是字符左端或者右端是要查找的重点 可以用left()或者right() 截取一部分来查找 还是用 =
如果是text的列,那只能用全文索引了
2.字符拼接?你是不是用了CONCAT('xx','xx')这个函数?这个就是把字符串拼起来的函数
运算应该就是简单的加减乘除运算吧,或者有NOW()之类的函数,在简单的sql查询里也不可能进行太复杂的运算操作。他提这点,应该是你的语句使mysql不能使用查询缓存,导致效率低
新浪的意思大概就是你的sql效率太低,需要优化,你可以看看sql语句,有哪些优化的地方,优化优化就好了
展开全部
还可以用like "[A-B-D]* " 表示以A,B,D打头的字符
LIKE的用法很多:
匹配类型模式匹配(返回 True)不匹配(返回 False)
多个字符 a*a aa, aBa, aBBBa aBC
*ab* abc, AABB, Xab aZb, bac
特殊字符 a[*]a a*a aaa
多个字符 ab* abcdefg, abc cab, aab
单个字符 a?a aaa, a3a, aBa aBBBa
单个数字 a#a a0a, a1a, a2a aaa, a10a
字符范围 [a-z] f, p, j 2, &
范围之外 [!a-z] 9, &, % b, a
非数字值 [!0-9] A, a, &, ~ 0, 1, 9
复合值 a[!b-m]# An9, az0, a99 abc, aj0
运算和字符拼接就上字符判断或者计算比较相加相替换啊
LIKE的用法很多:
匹配类型模式匹配(返回 True)不匹配(返回 False)
多个字符 a*a aa, aBa, aBBBa aBC
*ab* abc, AABB, Xab aZb, bac
特殊字符 a[*]a a*a aaa
多个字符 ab* abcdefg, abc cab, aab
单个字符 a?a aaa, a3a, aBa aBBBa
单个数字 a#a a0a, a1a, a2a aaa, a10a
字符范围 [a-z] f, p, j 2, &
范围之外 [!a-z] 9, &, % b, a
非数字值 [!0-9] A, a, &, ~ 0, 1, 9
复合值 a[!b-m]# An9, az0, a99 abc, aj0
运算和字符拼接就上字符判断或者计算比较相加相替换啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一一回答你的问题:
1:不使用like的话,可以建立全文索引进行模糊查询(不支持中文,对表引擎也有选择,需要innodb引擎),或者可以用正则来进行匹配
2:在sql中进行运算?我估计他的意思是说对列进行了运算,特别是where条件中对字段的运算,举个例子select * from tbname where a*3=6,-------查询a字段值乘以3=6的记录,对于那个字符拼接,不知道什么意思
---------------------以上两点,大致的意思是说,那么做会用不了索引,查询效率慢,而且你like '%%'这么写的话,就算建了索引,也不用不了的,可以写成like 'a%'
-----------------有问题可以追问
1:不使用like的话,可以建立全文索引进行模糊查询(不支持中文,对表引擎也有选择,需要innodb引擎),或者可以用正则来进行匹配
2:在sql中进行运算?我估计他的意思是说对列进行了运算,特别是where条件中对字段的运算,举个例子select * from tbname where a*3=6,-------查询a字段值乘以3=6的记录,对于那个字符拼接,不知道什么意思
---------------------以上两点,大致的意思是说,那么做会用不了索引,查询效率慢,而且你like '%%'这么写的话,就算建了索引,也不用不了的,可以写成like 'a%'
-----------------有问题可以追问
追问
谢谢,拼接我大概明白,刚刚我看了一下文章说in or 会使索引失效,如果不使用正则,就只能like 'a%'这样写吗?
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1:创建索引,然后
select * from tablenamewith(index=索引名)where 字段名like '%slls%'
2:在sql里做运算和字符拼接就是指不直接输出结果,比如select a+b from table;或update table set column=a+b where ...等
select * from tablenamewith(index=索引名)where 字段名like '%slls%'
2:在sql里做运算和字符拼接就是指不直接输出结果,比如select a+b from table;或update table set column=a+b where ...等
追问
创建索引那句我不太明白,你能写一个实例出来吗?table是user,字段是name,谢谢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询