首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

除非存在变量,否则不使用NOT LIKE

"除非存在变量,否则不使用NOT LIKE" 是一种编程规范或最佳实践,用于在数据库查询中避免使用 NOT LIKE 操作符,除非需要使用变量来构建查询条件。

NOT LIKE 是一种用于模式匹配的操作符,用于在数据库中查找不符合指定模式的数据。然而,使用 NOT LIKE 可能会导致性能问题,特别是在大型数据库中,因为它需要对每条记录进行模式匹配。

相反,如果查询条件是固定的,最好使用其他更高效的操作符,如等于(=)或 LIKE。这些操作符可以更快地执行查询,因为它们不需要进行模式匹配。

然而,如果查询条件需要根据变量的值动态构建,那么使用 NOT LIKE 是合理的。在这种情况下,可以使用参数化查询或预编译语句来提高性能和安全性。

总结起来,除非查询条件需要根据变量动态构建,否则最好避免使用 NOT LIKE 操作符,以提高查询性能。在构建查询条件时,应考虑使用其他更高效的操作符,并遵循编程规范和最佳实践。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java避坑指南:使用ThreadLocalRandom不可设置为静态变量否则导致随机数可预测

---- 简介 ---- 在博文中,我们建议尽量使用private static final ThreadLocal,使用工具类封装ThreadLocal的set、get、remove方法。...但是Java并发工具ThreadLocalRandom则不能设置为静态变量否则导致随机数可预测,正确使用ThreadLocalRandom的方式为: ThreadLocalRandom.current...故ThreadLocalRandom则不能设置为静态变量,我们必须在当前线程调用java.util.concurrent.ThreadLocalRandom#current方法,以初始化当前线程的随机种子值...: 我们建议使用的方式为: ThreadLocalRandom.current().nextX(...)...在上述示例中,输出结果在jdk11环境下,两个线程的随机数竟是一样的,但是在jdk19环境下两个线程的随机数不是一样的,主要是因为随机数每次更新值的时候,把线程ID也放进去了: 小结 ---- 正确使用

40110
  • 数据库知识学习,数据库设计优化攻略(十)

    Not IN 走索引的是绝对不能用的,可以用 NOT EXISTS 代替 ➢ IS NULL 或 IS NOT NULL 操作 索引是索引空值的,所以这样的操作不能使用索引,可以用其他的办法处理,例如...用其它相同功能的操作运算代替,如 a0 改为 a>0 or a’’ 改为 a>’’ ➢ 用全文搜索搜索文本数据,取代 like 搜索 全文搜索始终优于 like 搜索: (1)全文搜索让你可以实现...like 不能完成的复杂搜索,如搜索一个单词或一个短语,搜索一个与另一个单词或短语相 近的单词或短语,或者是搜索同义词; (2)实现全文搜索比实现 like 搜索更容易(特别是复杂的搜索); 3.3.2...➢ 对于聚合查询,可以用 HAVING 子句进一步限定返回的行 ➢ 避免使用临时表 (1)除非却有需要,否则应尽量避免使用临时表,相反,可以使用变量代替; (2)大多数时候(99%),表变量驻扎在内存中...select field3,field4 from tb where field2 like 'R%' 快 select field3,field4 from tb where field2 like

    62810

    iOS学习——#define、const、typedef的区别

    一、基本概念 1.1、#define   #define并不是定义全局变量,而是宏定义。也就是说并不是真正意义上的定义变量,而是用来做文本替换。...,存在静态区),而 #define定义的常量在内存中有若干个拷贝。...编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。...2.2 typedef和#define define是文本替换,属于预编译指令,本身参与编译,除非希望替换的文本中有;否则不用加。...typedef是类型替换,语句的一种,结尾必须有; define写在方法/函数中则作用域从写的地方开始有效,直至使用#undef(写此指令则后面一直有效)。

    81340

    SQL中 WITH AS 的使用方法

    from person.CountryRegion where Name like 'C%' ) 上面的查询语句使用了一个子查询。...由于表变量实际上使用了临时表,从而增加了额外的I/O开销,因此,表变量的方式并不太适合数据量大且频繁查询的情况。...在使用CTE时应注意如下几点: 1. CTE后面必须直接跟使用CTE的SQL语句(如select、insert、update等),否则,CTE将失效。...如果CTE的表达式名称与某个数据表或视图重名,则紧跟在该CTE后面的SQL语句使用的仍然是CTE,当然,后面的SQL语句使用的就是数据表或视图了,如下面的SQL语句所示: -- table1是一个实际存在的表...不能在 CTE_query_definition 中使用以下子句: (1)COMPUTE 或 COMPUTE BY (2)ORDER BY(除非指定了 TOP 子句) (3)INTO (4)带有查询提示的

    16310

    MySQL中字符串比较函数学习--MySql语法

    LIKE 'David\_'; -> 0 mysql> SELECT 'David_' LIKE 'David\_'; -> 1 要指定一个不同的转义字符,可使用ESCAPE...以下两个语句举例说明了字符串比较区分大小写,除非其中一个操作数为二进制字符串: mysql> SELECT 'abc' LIKE 'ABC'; -> 1 mysql> SELECT '...mysql> SELECT 10 LIKE '1%'; -> 1 注释:由于 MySQL在字符串中使用 C转义语法(例如, 用‘\n’代表一个换行字符),在LIKE字符串中,必须将用到的...若expr 匹配 pat,则返回 1; 否则返回0。若 expr 或 pat 任意一个为 NULL, 则结果为 NULL。RLIKE 是REGEXP的同义词, 作用是为mSQL 提供兼容性。...REGEXP 区分大小写, 除非将其同二进制字符串同时使用。 mysql> SELECT 'Monty!'

    1.9K30

    ERROR 1062 (23000) at line 1: Duplicate entry 1332883220 for key group_key

    --+------------------+----------------------+------------+-----------------+ 现在需要将相同的UIN数据归并为一条数据,于是使用了如下...抛弃,不放弃,黄天不负有心人,终于在stack overflow社区上找到了解决方法,具体参见Duplicate entry for key ‘group_key’。...关于max_heap_table_size 这个变量定义了用户可以创建的内存表(memory table)的大小,可用来计算内存表的最大行数值。...这个变量支持动态改变,即set @max_heap_table_size=#,但对于已经存在的内存表就没有什么用了,除非这个表被重新创建(create table)或者修改(alter table)或者...服务重启也会设置已经存在的内存表为全局max_heap_table_size的值。 这个变量和tmp_table_size一起限制了内部内存临时表的大小。

    1.9K40

    Mysql常用sql语句(9)- like 模糊查询

    like 区分大小写的栗子 默认情况下,like匹配的字符串是区分大小写的; 和 like "TEST1" 匹配的结果是一样的 like "test1" 如果需要区分大小写,需要加入 关键字 binary...不会返回任何记录,test1和test2不会被匹配到 select * from yyTest where username like binary "TEST_"; 使用转义符的栗子 如果查询的字符串包含...%,可以使用 转义符 \ 实际场景:搜索功能,搜索框只输入%看是否返回所有记录,如果是的话证明没有做转义可以提个优化项哦!...转义符+通配符联合使用的栗子 select * from yyTest where username like "%\%" 使用通配符的注意点 注意大小写:不加binary关键字的话,大小写是不敏感的...在确定使用通配符后:除非绝对有必要,否则不要把它们用在字符串的开始处,把通配符置于搜索模式的开始处,搜索起来是最慢的。

    2.8K20

    深入理解MySQL字符集及校对规则(一)

    如果比较的两个字符集不同,则MySQL在比较前会先将其转换到同一个字符集再比较,如果两个字符集兼容,则会报错Illegal mix of collations MySQL系统变量值: root@localhost...character_set_client变量作为客户端发送的SQL语句中使用的字符集。...它把客户端传来的语句,从character_set_client字符集转换成character_set_connection字符集(除非字符串中有类似_latin1或者_utf8的字符集声明)。...注意: 系统使用utf8字符集,若使用utf8_bin校对规则执行SQL查询时区分大小写,使用utf8_general_ci区分大小写(默认的utf8字符集对应的校对规则是utf8_general_ci...,如果设置就继承服务器字符集和校对规则,操作变量为: SET character_set_database =utf8;SET collation_database=utf8; 7、创建一个新的数据库时可以指定字符集和校对规则

    1.4K10

    MySQL中的通配符与正则表达式

    查询"李"姓老师的数量 select count(t_id) from te where t_name like '李%'; 为在搜索子句中使用通配符,必须使用LIKE操作符。...LIKE指示MySQL,后跟的搜索模式利用通配符匹配而不是直接相等匹配进行比较。 通配符(wildcard) 用来匹配值的一部分的特殊字符。 百分号(%)通配符 最常使用的通配符是百分号(% )。...这里给出一些使用通配符要记住的技巧。 不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符。 在确实需要使用通配符时,除非绝对有必要,否则不要把它们用在搜索模式的开始处。...LIKE 匹配整个列。如果被匹配的文本在列值中出现,LIKE 将不会找到它,相应的行也不被返回(除非使用通配符)。...使用^ 和$ 定位符可使得REGEXP 用来匹配整个列值。 ---- MySQL中的正则表达式匹配区分大小写。为区分大小写,可在REGEXP后使用BINARY 关键字。

    1.5K20

    谈谈SQL查询中回表对性能的影响

    运营反馈某个功能速度很慢,查了一下,定位到如下 SQL: select id from user where name like ‘%foobar%’ order by created_at limit...10; 业务需要,LIKE 的时候必须使用模糊查询,我当然知道这会导致全表扫描,不过速度确实太慢了,直观感受,全表扫描不至于这么慢!...要想搞清楚缘由,你需要理解本例中 SQL 查询的处理流程:当使用 limit 时,因为只是返回几条数据,所以优化器觉得采用一个满足 order by 的索引比较划算;当不使用 limit 时,因为要返回所有满足条件的数据...不过就算知道这些还是不足以解释为什么在本例中全表扫描反而快,实际上这是因为当使用索引的时候,除非使用了 covering index,否则一旦索引定位到数据地址后,这里会有一个「回表」的操作,形象一点来说...,就是返回原始表中对应行的数据,以便引擎进行再次过滤(比如本例中的 like 运算),一旦回表操作过于频繁,那么性能无疑将急剧下降,全表扫描没有这个问题,因为它就没用索引,所以不存在所谓「回表」操作。

    2.3K20

    MongoDB模糊查询($regex查询、正则表达式匹配查询)

    sql 的写法 select * from member where name like '%XXX%' 在mongodb中: db.member.find({"name":{ $regex:/...这里 options 还有以下几个选项供使用: 选项 描述 语法限制 i 区分大小写以匹配大小写的情况。...如果没有此选项,这些锚点将在字符串的开头或结尾处匹配,如果模式包含锚点或者字符串值没有换行符(例如\n),则该m选项无效。...x $regex除非转义或包含在字符类中,否则“扩展”功能可忽略模式中的所有空格字符。...有关示例,请参阅使用。点匹配新线。 需要$regex与$options语法 注意:不能在$regex里面使用运算符表达式 $in; 还有:如果模糊查询的字段存在索引的话,查询速度会更快。

    13.1K10

    程序员必须掌握的MySQL优化指南(上)

    下面的优化是基于单表优化,当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度...索引并不是越多越好,要根据查询有针对性的创建,考虑在WHERE和ORDER BY命令上涉及的列建立索引,可根据EXPLAIN来查看是否用了索引还是全表扫描 应尽量避免在WHERE子句中对字段进行NULL值判断,否则将导致引擎放弃使用索引而进行全表扫描...=或操作符,否则将引擎放弃使用索引而进行全表扫描 对于连续数值,使用BETWEEN不用IN:SELECT id FROM t WHERE num BETWEEN 1 AND 5 列表数据不要拿全表,...可以通过命令show status like 'Qcache_%'查看目前系统Query catch使用大小 read_buffer_size:MySql读入缓冲区大小。...如果对表的顺序扫描请求非常频繁,可以通过增加该变量值以及内存缓冲区大小提高其性能 sort_buffer_size:MySql执行排序使用的缓冲大小。

    32010

    Mysql 大数据量高并发的数据库优化

    使用这个规定的好处是,你可以确保不会在分离的表格中引入多余的列,所有你创建的表格结构都与它们的实 际需要一样大。应用这条规定是一个好习惯,不过除非你要处理一个非常大型的数据,否则你将不需要用到它。...12.尽量使用变量来代替临时表。如果表变量包含大量数据,请注意索引非常有限(只有主键索引)。 13.避免频繁创建和删除临时表,以减少系统表资源的消耗。...避免使用不兼容的数据类型。例如float和int、char和varchar、binary和varbinary是兼容的。数据类型的兼容可能使优化器无法执行一些本来可以进行的优化操作。...12.尽量使用变量来代替临时表。如果表变量包含大量数据,请注意索引非常有限(只有主键索引)。 13.避免频繁创建和删除临时表,以减少系统表资源的消耗。...避免使用不兼容的数据类型。例如float和int、char和varchar、binary和varbinary是兼容的。数据类型的兼容可能使优化器无法执行一些本来可以进行的优化操作。

    1.4K51

    数据库Day2:MySQL从0到1

    索引:类似书籍中的目录,使用索引可以快速访问数据库中的特定信息,是对数据库表中一列或者多列值进行排序的一种结构 参照完整性:要求关系中不允许引用不存在的实体,保证数据一致性。...除非使用 LIKE 来比较字符串,否则MySQL的WHERE子句的字符串比较是区分大小写的。可以使用 BINARY 关键字来设定WHERE子句的字符串比较是区分大小写的。...你可以在WHERE子句中使用LIKE子句。 你可以使用LIKE子句代替等号(=)。 LIKE 通常与 % 一同使用,类似于一个元字符的搜索。 你可以使用AND或者OR指定一个或多个条件。..."--------------------------------"; } like需要和%配合使用否则like的作用就是= %A->以A结尾;A%->以A开头;%A%->包括A  Mysql...所以在使用SQL命令时需要输入正确的名称。 return retval,retval应该是一个BOOL型的变量。在方法正常执行成功后应该会返回true,否则是false。

    3.7K20
    领券