MySQL中比like语句更高效的写法locate position instr find_in_set

你是否一直在寻找比MySQL的LIKE语句更高效的方法的,下面我就为你介绍几种。

LIKE语句

SELECT `column` FROM `table` where `condition` like`%keyword%‘

事实上,可以使用 locate(position) 和 instr这两个函数来代替

LOCATE语句

SELECT `column` from `table` where locate(‘keyword’,`condition`)>0

或是 locate 的別名 position

POSITION语句

SELECT `column` from `table` where position(‘keyword’ IN`condition`)

或是

INSTR语句

SELECT `column` from `table` where instr(`condition`, ‘keyword’)>0

locate、position 和 instr 的差別只是参数的位置不同,同时locate多一个起始位置的参数外,两者是一样的。

mysql> SELECT LOCATE(‘bar’, ‘foobarbar’,5);

-> 7

速度上这三个比用 like 稍快了一点。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~华丽的分割线~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

还要给大家介绍一个新成员,那就是find_in_set

find_in_set(str1,str2) 函数:返回str2中str1所在的位置索引,其中str2必须以","分割开。

表:

mysql> select * from region;

+----+-------------+

| id | name               |

+----+-------------+

|  1  | name1,nam2  |

|  2  | name1             |

|  3  | name3       |

|  4  | name2,name4 |

|  5  | name3,name5 |

+----+-------------+

5 rows in set (0.00 sec)

FIND_IN_SET语句

mysql> select * from test where find_in_set(‘name1‘,name);

+----+------------+

| id | name            |

+----+------------+

|  1  | name1,nam2 |

|  2  | name1      |

+----+------------+

2 rows in set (0.02 sec)

谢谢关注websites博客.
时间: 2025-01-02 14:24:47

MySQL中比like语句更高效的写法locate position instr find_in_set的相关文章

MySQL比like语句更高效的写法locate position instr find_in_set

你是否一直在寻找比MySQL的LIKE语句更高效的方法的,下面我就为你介绍几种. LIKE语句 SELECT `column` FROM `table` where `condition` like `%keyword%' 事实上,可以使用 locate(position) 和 instr 这两个函数来代替 一.LOCATE语句 SELECT `column` from `table` where locate('keyword', `condition`)>0 二.或是 locate 的別名

MySQL比like语句更高效的写法locate position instr find_in_se

SELECT `column` from `table` where locate('keyword', `condition`)>0; // LOCATE(substr,str,pos);locate 多一个起始位置的参数 SELECT `column` from `table` where position('keyword' IN `condition`); SELECT `column` from `table` where instr(`condition`, 'keyword')>

mysql中常用的语句整理

mysql中常用的语句: 1:创建带自增长的主键的表 DROP TABLE IF EXISTS user_login ; CREATE TABLE user_login (   user_id INT  UNSIGNED NOT NULL AUTO_INCREMENT,   user_name VARCHAR(50) DEFAULT NULL,   PRIMARY KEY user_id ) ENGINE=MYISAM  AUTO_INCREMENT=0  DEFAULT CHARSET=utf

Django的API操作mysql中常用的语句

[背景] 增/删/改/查 如何操作数据库 导入数据库的模型 In [23]: from blog.models import People [增加记录]--三种方法 方法一: 直接使用数据模对象的create函数 In [24]: People.objects.create(name='shuaige') Out[24]: <People: People object> 注意:创建成功返回对象地址 方法二: In [6]: record = People(name='choubaguai') 

在MySQL中阻止UPDATE语句没有添加WHERE条件的发生

如果在生产环境中使用UPDATE语句更新表数据,此时如果忘记携带本应该添加的WHERE条件,那么..Oh,no…后果可能不堪设想.那么有没有什么办法可以阻止这样的事情发生,又不使用任何的审核工具呢...办法当然是有的 sql_safe_updates sql_safe_updates这个MySQL自带的参数就可以完美的解决我们的问题,并且该参数是可以在线变更的哦~当该参数开启的情况下,你必须要在UPDATE语句后携带WHERE条件,否则就会报出ERROR.. 举个栗子 # sql_safe_up

mysql中,执行delete语句时出现Lock wait timeout exceeded问题

问题描述: 当我插入一条记录时,在调用save方法的时候出现了异常(记录重复了),导致了后面的commit语句不能执行了.这时我在数据库中删除重复记录时发现该表已经被锁上了.即出现错误.但过了一会再次执行delete,就能成功删除记录了. 原因分析: 由于commit语句没有执行到,即事务没有提交成功,表还是被锁着的.只能等锁超时了,才能再次执行delete等操作. 解决办法: 1.遇到问题后可以kill掉对应的线程再次执行delete等操作. 2.为避免问题出现,可以开启mysql中的auto

C#中一种替换switch语句更优雅的写法

今天在项目中遇到了使用switch语句判断条件,但问题是条件比较多,大概有几十个条件,满屏幕的case判断,是否有更优雅的写法替代switch语句呢? 假设有这样的一个场景:商场经常会根据情况采取不同的打折方案,如果打折方案比较少,可以考虑使用switch语句作判断.但如果有几十甚至几百种打折方案的时候,用switch语句就不够优雅. 先来一个打折接口. public interface IValueProcessor { decimal DaZhe(short policy,decimal o

MySQL中的replace语句

一.背景 当使用replace语句更新access_apps表时,原有的mark列.remark列的信息丢失. CREATE TABLE `access_apps` (   `base` varchar(11) NOT NULL DEFAULT '',   `business` varchar(64) NOT NULL DEFAULT '',   `owt` varchar(64) NOT NULL DEFAULT '',   `pdl` varchar(64) NOT NULL DEFAULT

mysql中的判断语句

在mysql中,有时候我们需要在生成数据之前先做一些基础判断,这个时候我们可以case then使用简单的判断 SELECT CASE sex WHEN 1 THEN '男' WHEN 2 THEN '女' ELSE '无性别' END as content from 表名