Mysql模糊查询like效率,以及更高效的写法

2023-11-16

原文来自:https://www.cnblogs.com/chaobest/p/6737901.html


在使用msyql进行模糊查询的时候,很自然的会用到like语句,通常情况下,在数据量小的时候,不容易看出查询的效率,但在数据量达到百万级,千万级的时候,查询的效率就很容易显现出来。这个时候查询的效率就显得很重要!

 

一般情况下like模糊查询的写法为(field已建立索引):

SELECT `column` FROM `table` WHERE `field` like '%keyword%';

上面的语句用explain解释来看,SQL语句并未用到索引,而且是全表搜索,如果在数据量超大的时候,可想而知最后的效率会是这样

对比下面的写法:

SELECT `column` FROM `table` WHERE `field` like 'keyword%';

这样的写法用explain解释看到,SQL语句使用了索引,搜索的效率大大的提高了!

 

但是有的时候,我们在做模糊查询的时候,并非要想查询的关键词都在开头,所以如果不是特别的要求,"keywork%"并不合适所有的模糊查询

 

这个时候,我们可以考虑用其他的方法

1.LOCATE('substr',str,pos)方法

SELECT LOCATE('xbar',`foobar`); 
###返回0 

SELECT LOCATE('bar',`foobarbar`); 
###返回4

SELECT LOCATE('bar',`foobarbar`,5);
###返回7

备注:返回 substr 在 str 中第一次出现的位置,如果 substr 在 str 中不存在,返回值为 0 。如果pos存在,返回 substr 在 str 第pos个位置后第一次出现的位置,如果 substr 在 str 中不存在,返回值为0。

SELECT `column` FROM `table` WHERE LOCATE('keyword', `field`)>0

备注:keyword是要搜索的内容,field为被匹配的字段,查询出所有存在keyword的数据

 

2.POSITION('substr' IN `field`)方法

position可以看做是locate的别名,功能跟locate一样

SELECT `column` FROM `table` WHERE POSITION('keyword' IN `filed`)

3.INSTR(`str`,'substr')方法

SELECT `column` FROM `table` WHERE INSTR(`field`, 'keyword' )>0 

 

除了上述的方法外,还有一个函数FIND_IN_SET

FIND_IN_SET(str1,str2):

返回str2中str1所在的位置索引,其中str2必须以","分割开。

SELECT * FROM `person` WHERE FIND_IN_SET('apply',`name`);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mysql模糊查询like效率,以及更高效的写法 的相关文章

  • 如何知道 Solr Optimize 何时完成?

    我正在使用 Solr php client 通过 php 与 Solr 进行通信 这段代码触发solr优化命令 solr gt optimize 请问有没有什么方法可以确定优化完成了 这都是因为我的网站上有一个管理页面 我每天必须手动优化
  • Redis 是否使用用户名进行身份验证?

    我已经在我的环境中设置了Redis 并且只看到了通过密码授权的部分 有没有办法也设置用户名 还是只能通过密码验证 Redis 6 上有 ACL 这些都有一个用户名 查看https redis io topics acl https redi
  • GoLang - 坚持使用 ISO-8859-1 字符集

    我正在开发一个项目 我们需要将信息保存在具有 ISO 8859 1 表的旧数据库中 因此 在向数据库写入内容之前 我需要将其从 UTF 8 转换为 ISO 8859 1 每次从数据库检索它时 我都需要将其转换回 UTF 8 我试图使用图书馆
  • 检索使用 Uniqueidentifier 插入的最后一行,它不是 IDENTITY

    我对一个查询感到困惑 我需要找出表中添加的最后一行 其中有一列数据类型为 Uniqueidentifier 列是 aspnet Applications ApplicationId 注意 该列是Uniqueidentifier 它不是IDE
  • CodeIgniter 数据库连接未关闭

    我在 CodeIgniter 中建立了一个社交社区网站 该网站现在获得了相当多的流量 托管公司已经开始抱怨并说数据库正在接收空连接以及未关闭的连接 我不完全确定空查询是什么或者最终如何发出空查询 有什么想法吗 我添加了额外的代码以在代码结束
  • 我的项目中的更新语句未更新表中的数据

    我正在尝试更新 Employee MY 查询显示消息 员工记录已成功更新 但它没有在表中更新我的代码如下 eid intval GET uin uin POST uin fname POST firstName lname POST las
  • Android 内容提供商更新某些列

    我正在尝试制作一个 Android 应用程序来确定完成任务还剩多少时间 我遵循了Vogella的教程 特别是这一部分http www vogella com articles AndroidSQLite article html todo
  • 在 DataGrip JetBrains 中创建新数据库

    任何人都知道如何创建新数据库DataGrip https goo gl 99xqGb JetBrains 的数据库 IDE 找不到DataGrip 帮助页面 https goo gl pnFpGS In 数据夹2017 1 https bl
  • 什么时候数据库被称为嵌入式数据库?

    术语 嵌入式数据库 与 数据库 具有不同的含义吗 我见过的嵌入式数据库有两种定义 嵌入式数据库就像专门为 嵌入式 空间 移动设备等 设计的数据库系统一样 这意味着它们在紧张的环境中 内存 CPU 方面 可以合理地执行 嵌入式数据库就像不需要
  • 在实时计算机上更新(或替换)整个数据库表的最佳方法是什么?

    我每周都会收到一个数据源 我将对其进行解析并放入数据库中 数据每周不会有太大变化 但我应该定期更新数据库 除了每周更新外 数据是静态的 目前重建整个数据库不是问题 但最终该数据库将上线 人们可以在我重建数据库时查询该数据库 数据量并不小 几
  • 环回:原子读取和更新

    有没有办法在环回中实现类似的东西 LOCK READ INCREMENT UNLOCK 我想将计数器保留为数据库值 每个键都是一个计数器 或一个设置 并且它们不应该同时访问我的多个请求 此外 这也应该适用于本地请求 无 RemoteHook
  • Hibernate 乐观锁..它是如何工作的?

    我正在阅读下面关于休眠乐观锁定的博客 我打算将它与休眠一起使用 但是 我有一个担忧 我们有java代码和c 代码 都连接到一个数据库 虽然java代码可以使用hibernate来实现乐观锁定 但我想让c 代码做同样的事情 此外 C 代码正在
  • 如何获取与值匹配或存在于另一个表中的记录?

    我试图弄清楚在这种情况下如何获取所有任务 其中两个字段等于某个值或者它们存在于另一个表中 这是查询 SELECT TASKS task id TASKS task title TASKS task description TASKS tas
  • 非关系数据库设计[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有兴趣了解您使用过的设计策略非关系型 nosql 数据库 也就是说 不使用传统关系设计或 SQL 的 大多数是新的 数据存储类 例如
  • 通过单击按钮将 Access 中的数据获取到 C# 中的文本框中

    我在 MS Access 中有一个表 其中包含 FoodID FoodName Price 在 C 中 我有三个文本框 txtId txtName txtPrice 和一个按钮 btnSearch 我的问题是 在 C 中 我只需在 txtI
  • 如何在postgresql中查找具有特定列的表

    我正在使用 PostgreSQL 9 1 我有一个表的列名 是否可以找到具有此列的表 如果是这样 怎么办 你也可以做 select table name from information schema columns where colum
  • 限制 sqlite 表的最大行数

    我希望实现一种 活动日志 表 其中用户执行的操作存储在 sqlite 表中 然后呈现给用户 以便他们可以看到他们所做的最新活动 然而 自然地 我觉得没有必要保留每一个历史记录 所以我想知道是否有一种方法可以配置表以在达到最大设置限制后开始修
  • Neo4j Desktop DB 无法启动,状态为“KILLED”

    运行 Neo4j Desktop 版本 1 0 15 尝试启动DB导致启动失败 数据库启动失败 DB database f8950fdd 6b5f 4fea 8c9f e8457ee1da9a v3 3 1 退出 状态为 已杀 检查日志 主
  • 如何在列上创建外键,该列的每条记录都可能引用多个表之一中的列?

    我正在创建一个社交网络 它有新闻 照片等多个实体 可以有评论 由于所有评论都具有相同的列并且行为方式相同 唯一的区别是它们的类型 新闻 照片或将来添加的其他内容 我决定为所有评论创建一个表 其中的列名为type 它工作得很好 直到我决定将外
  • APEX 安装失败,PLS-00201:必须声明标识符“SYS.DBMS_DB_VERSION”

    尝试在 Oracle XE 18c 数据库上安装 Oracle APEX 20 2 如下官方说明 https docs oracle com en database oracle application express 20 1 htmig

随机推荐

  • 静态代码检测

    什么是静态代码分析 静态代码分析是一种在软件开发过程中对源代码进行分析的技术 它通过检查代码的结构 语法 语义等方面 以发现潜在的错误 安全漏洞 性能问题等 并提供相应的建议和警告 与动态测试方法 如单元测试 不同 静态代码分析是在代码执行
  • 【用户体验分析报告】 按需加载组件,导致组件渲染卡顿,影响交互体验?组件拆包&预加载方案来了!

    首先 我们看一些针对 如何提升应用首屏加载体验 的文章 提到的必不可少的措施 便是减少首屏幕加载资源的大小 而减少资源大小必然会想到按需加载措施 本文提到的便是一个基于webpack 插件与 react 组件实现的一套研发高度自定义 组件按
  • [Mac SSH]如何在Terminal端删除或修改已上传文件夹

    如何在Terminal删除或修改Github已上传文件夹 Step 1 找到路径 Step 2 修改或删除文件 Step 3 Commit to Github Step 4 Push 修改 Step 1 找到路径 在Terminal 上 c
  • Git教程个人分享:如何将一个本地项目上传至远程仓库的流程

    前言 今天来分享一下 关于Git的一些教程 同时这也是我自己曾今学习Git时候的笔记 之所以更 也是方便后期自己可以去回顾 当然后面也会出一部分关于Git其他操作方面的内容 这次我们分享的是 如何将一个本地项目上传至远程仓库的流程 相信这个
  • SQL SERVER的注入要点

    SQL SERVER的注入要点 一 SQLServer数据库的查询语句 函数查询 1 select version 查询数据库的版本 2 select host name 查询主机名 如果是用navicat远程连接的话 主机名是本地的名字
  • shell编程入门知识

    1 realpath 获取文件绝对路径 kylin kylin D2000 crystalmedia scripts realpath activeMq docker sh home kylin crystalmedia scripts a
  • Springboot 启动异常--ApplicationContextException: ...missing ServletWebServerFactory bean

    问题 不占用端口启动时 程序正常执行 下面为两种springboot启动方式 使用纯后台方式启动 不占用端口 springboot2 0以后的写法 new SpringApplicationBuilder sources Applicati
  • VScode 一些快捷操作 删除空行

    文章目录 通过键盘快捷键选中 一个光标所对应的变量 向上向下复制行 向上向下另起新一行 跳格删除 快速删除行 多行同时编辑 代码折叠展开 位置跳转 跳转到指定行号 开启关闭侧边栏 类似与Word的块选择 HTML相关 删除空行 生成一段实例
  • shell 执行qt生成文件_qt通过qprocess运行shell命令

    I am developing a small QT application to interact with the terminal to send commands to the terminal and to read back i
  • IntelliJ IDEA重置配置设定

    https www jetbrains com help idea directories used by intellij idea to store settings caches plugins and logs html
  • python里format的.2f用单引号_FEniCS应用(2):Python基础语法(未完待续)

    注 本学习笔记与中国大学MOOC平台 Python语言程序设计 北京理工大学 相对应 本笔记跳过基础概念部分 着重于应用 一 对python的认知 python是大小写敏感的 python文件名不能以数字开头 表示单行注释 三个单引号表示多
  • ubuntu17安装mysql后数据库乱码_ubuntu安装mysql数据库过程中出现依赖性Depends错误解决办法...

    1 sudo apt get update 2 sudo apt get install mysql server mysql client 若出现如下错误 无法安装 jianliu ubuntu sudo apt get install
  • PHP-Guzzle异步、并发

    参考 Guzzle文档 PHP Guzzle是一个HTTP客户端 可以使用它来发送各种HTTP请求 并发请求一 promises key1 gt client gt getAsync website1 key2 gt client gt g
  • el-table + setup语法糖 + 列表变化后滚动条置顶

    el table setup语法糖 列表变化后滚动条置顶 由于需要做一个el table 然后再更新地图同时将滚动条滚至最上 但是网上很多资料都是使用this refs 底部 this nextTick gt this refs table
  • SSM框架---springMVC

    目录 一 概述 分层思想 二 工作原理 1 导入jar包 2 创建启动类 三 处理请求参数 3 1 get方式 3 2 post方式 3 3 restful方式 推荐 四 处理get 请求的参数 五 处理post请求的参数 六 处理rest
  • ACM学习计划

    看完人家的博客 发现任重道远 一位高手对我的建议 一般要做到50行以内的程序不用调试 100行以内的二分钟内调试成功 acm主要是考算法的 主要时间是花在思考算法上 不是花在写程序与debug上 下面给个计划你练练 第一阶段 练经典常用算法
  • PHP的bcadd()函数用法

    求和后保留X位小数的函数 一般用于价格累加 查询出来的价格即使是浮点型 但是运用 后会变成整型 若需求需要保留小数位 则需要用到这个函数 bcadd 被加数 加数 保留几位小数 bcadd 1 3 2 4 00
  • 华为OD机试真题-最长密码【2023.Q1】

    题目描述 小王在进行游戏大闯关 有一个关卡需要输入一个密码才能通过 密码获得的条件如下 在一个密码本中 每一页都有一个由26个小写字母组成的若干位密码 每一页的密码不同 需要从这个密码本中寻找这样一个最长的密码 从它的末尾开始依次去掉一位得
  • 从零开始学前端(一)

    1 在桌面空白的地方 点击右键新建一个文本文档 2 双击或者右键打开刚刚新建的文件 3 将下面的代码复制到刚刚打开的txt文件中 h1 大家好 我是一只羊 这是我的第一个网页 h1 p Hello world p 4 点击文件 点击另存为
  • Mysql模糊查询like效率,以及更高效的写法

    原文来自 https www cnblogs com chaobest p 6737901 html 在使用msyql进行模糊查询的时候 很自然的会用到like语句 通常情况下 在数据量小的时候 不容易看出查询的效率 但在数据量达到百万级