通过索引查询LIKE%MYSQL搜索速度慢

2023-11-24

我的表有 100 000 000 行,非常大。 表的结构

id         int          INDEX(not primary not unique just index)
lang_index varchar(5)   INDEX
name       varchar(255) INDEX
enam       varchar(255) INDEX

好的。我查询

1 Query

"SELECT name FROM table WHERE lang_index='en' AND name LIKE 'myname%'"

对于这张大桌子来说,速度还可以。约0.02秒

我尝试 2 查询

"SELECT name FROM table WHERE lang_index='en' AND (name LIKE 'myname%' OR enam LIKE 'myname%')"

非常非常慢大约230秒!!!

然后我试试这个 3 查询

"SELECT name FROM table WHERE lang_index='en' AND enam LIKE 'myname%'"

速度太棒了。约0.02秒

然后我将第二个查询分解为两个查询(1 和 3 查询),速度更快。大约 0.04 秒,但并不简单。

为什么我的查询速度很慢?两次查询比一次查询快得多。 我需要这样做"SELECT name FROM table WHERE lang_index='en' AND (name LIKE 'myname%' OR enam LIKE 'myname%')"我怎样才能让它更快?


The OR关键字让 MySQL 的优化器疯狂。

你可以尝试这样的事情。

SELECT name FROM table WHERE lang_index='en' AND name LIKE 'myname%'
UNION
SELECT name FROM table WHERE lang_index='en' AND enam LIKE 'myname%'

或者您可以考虑全文搜索。它需要 MyISAM 或 MySQL 5.6 或更高版本。

EDIT* 很难确切地知道这些优化的具体情况。你能试试这个吗?这将查看语言选择是否让您感到困惑。

 SELECT name 
   FROM table 
  WHERE (name LIKE 'myname%' OR enam LIKE 'myname%')

你能试试这个吗?

SELECT name FROM table WHERE lang_index='en' AND name LIKE 'myname%'
UNION ALL
SELECT name FROM table WHERE lang_index='en' AND enam LIKE 'myname%'

它不会给出完美的结果——它会有重复的名称项——但它会跳过一个DISTINCT查询中的重复数据删除步骤。

你也可以尝试这个。

SELECT name 
  FROM table
 WHERE lang_index='en'
   AND id IN (
    SELECT id from table 
     WHERE (name LIKE 'myname%' OR enam LIKE 'myname%'))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过索引查询LIKE%MYSQL搜索速度慢 的相关文章

  • 如何使用 SQL 对项目进行排序,然后按另一个条件再次排序

    我正在使用 MySQL 我想对记录进行排序 或者我想对记录进行分组 然后按另一个条件再次对其进行排序 例如我有 6 个项目 Names Group Jack G1 Dian G2 Emily G2 Dean G1 Teddy G2 Gabe
  • 如何为“%abc%”搜索创建文本索引?

    我想对查询进行索引x like abc 如果我有一个如下表 create table t data varchar 100 我想创建一个索引以便能够有效地执行以下操作 select from t where contains abc 和这个
  • SSL 速度:128 位与 256 位

    我决定使用 SSL 加密我的整个网站 即使实际上只有部分网站是必要的 最终结果是该网站现在有点慢 所以 我的问题是 我是否应该只加密网站的会员部分 请记住我在首页上有登录表单 我是否应该将加密降低到 128 位 如果站点总体较小 速度差异是
  • 使用 php 和 mysql 计算日期差(以小时为单位)

    我如何使用 php 和 mysql 找到以小时为单位的日期差异 Use TIMEDIFF http dev mysql com doc refman 5 1 en date and time functions html function
  • 为什么乘法比除法便宜?

    我最近编写了一个 Vector 3 类 并将我的 normalize 函数提交给朋友审阅 他说这很好 但我应该尽可能乘以倒数 因为在 CPU 时间上 乘法比除法便宜 我的问题很简单 这是为什么 从硬件可以更轻松地实现的基本运算的角度来考虑
  • 节省页面加载时间的提示[重复]

    这个问题在这里已经有答案了 我的问题 削减那些不必要的 kb 并使页面加载速度更快的最佳方法是什么 全部是什么优化实践 编码实践 在js php中 如果执行可以使您的页面更轻 为什么我问这个 我读了这篇关于 jquery js 与 jque
  • 错误代码:1062。重复条目“PRIMARY”

    因此 我的教授给了我表格将其插入数据库 但是当我执行他的代码时 MySQL 不断给出错误代码 1062 这是冲突表和插入 TABLES CREATE TABLE FABRICANTES COD FABRICANTE integer NOT
  • Android:了解 OnDrawFrame、FPS 和 VSync (OpenGL ES 2.0)

    一段时间以来 我在 Android 游戏中遇到了运动精灵间歇性 卡顿 的情况 这是一个非常简单的 2D OpenGL ES 2 0 游戏 这是一个持续存在的问题 我已经多次重新访问过 在我的游戏循环中 我有 2 个 计时器 一个用于记录前一
  • 条件对列表的 In 子句

    有一个表 我需要通过在配对值列表中应用和条件来获取分页记录 下面是解释 假设我有一堂课Billoflading其中有各个领域 表中两个重要字段是 tenant billtype 我有一个包含值的对列表 tenant1 billtype1 t
  • 在 SQL 中如何获得整数的最大值?

    我试图从 MySQL 数据库中找出整数 有符号或无符号 的最大值 有没有办法从数据库本身提取这些信息 是否有我可以使用的内置常量或函数 标准 SQL 或 MySQL 特定的 At http dev mysql com doc refman
  • 内连接 3 个表

    我正在使用 PHP 和 PDO 我需要重新收集连接 3 个表的信息 photos albums 相册照片 该表具有以下结构 photos photo id int path varchar nick varchar date timesta
  • MySQL 组合两个查询

    我有两个 MySQL 查询 QUERY SELECT sodnik 1 FROM prihodnji krog WHERE file id 8778 AND sodnik 1 UNION SELECT sodnik 2 FROM priho
  • mysql时间比较

    我有 job start 和 job end 时间 timediff 会给我时间差 现在我想看看这项工作是否花费了超过 2 小时 30 分钟 我如何比较它 如果我这样做 我会收到错误 timediff job start job end g
  • “create_date”时间戳字段的默认值无效

    我有以下 sql 创建语句 mysql gt CREATE TABLE IF NOT EXISTS erp je menus gt id INT 11 NOT NULL AUTO INCREMENT gt name VARCHAR 100
  • 蟒蛇 | MySQL | AttributeError:模块“mysql.connector”没有属性“connect”

    我正在学习 python 中的一个新库 mysql 我尝试执行以下命令 import mysql connector mydb mysql connector connect host localhost user root passwd
  • 如何删除MySQL中的所有事件

    如果我想删除某个事件 我需要查询类似的内容 DROP EVENT IF EXISTS eventname 但我找不到一次性删除所有事件的命令 必须一项一项地删除 有没有一次性删除所有事件的SQL DROP EVENT IF EXISTS S
  • 在python中将数据库表写入文件的最快方法

    我正在尝试从数据库中提取大量数据并将其写入 csv 文件 我正在尝试找出最快的方法来做到这一点 我发现在 fetchall 的结果上运行 writerows 比下面的代码慢 40 with open filename a as f writ
  • 如何修复“未知变量'sql-mode = ANSI'”?

    使用 MySQL 5 5 27 在 my cnf 中我有 mysql sql mode ANSI 启动 mysql 控制台后我得到 unknown variable sql mode TRADITIONAL MySQL 文档服务器 SQL
  • 无法加载身份验证插件“caching_sha2_password”

    我正在将 MySQL 8 0 与 MySQL Workbench 连接并收到以下错误 无法加载身份验证插件 caching sha2 password dlopen usr local mysql lib plugin caching sh
  • 如何统计订单总价?

    我有这些表 Orders id status user id address id 1 await 1 1 products id name price quantity 1 test1 100 5 2 test2 50 5 order p

随机推荐

  • 如何在 Silverlight 应用程序中调试 IIS 托管的 Web 服务

    有人知道如何在 Silverlight 4 0 应用程序中调试由 IIS 托管的 Web 服务吗 我的IIS版本是7 5 操作系统是windows 7 您能具体说明如何操作的步骤吗 太感谢了 运行解决方案时 在调试模式下 或具有最新的符号文
  • 如何将UIView转换为没有背景的UIImage?

    我有包含图钉图像和标签的 UIView 因为我们知道 UIView 是矩形 所以如果我将 UIView 转换为 UIImage UIImage 也是矩形 我想让 UIImage 像图钉图像一样 因为如果用户单击背景 UIImage 的事件将
  • C# 圣诞树

    我是 C 新手 因此我请求帮助我实现此目的 我刚刚有这个代码 class Program static void Main string args AnotherTriangle ob new AnotherTriangle ob Crea
  • 寻找图像中的空白区域

    这个问题在某种程度上与语言无关 但我选择的工具恰好是 numpy 数组 我正在做的是通过 PIL 获取两个图像的差异 img ImageChops difference img1 img2 我想找到包含从一张图片到另一张图片的变化的矩形区域
  • 对于由苹果的 Health App - HealthKit - iOS 创建的健康数据,HKMetadataKeyTimeZone 始终为零

    我正在使用 HealthKit 读取用户的健康数据 尝试从健康数据中获取时区信息 以确定健康活动发生在哪个确切时区 为此 我依赖 HealthKit 元数据中的 HKMetadataKeyTimeZone 键 但即使对于苹果健康应用程序自动
  • 如何通过 at() 函数访问二维向量的索引?

    我将在成员函数中初始化一个 2D 向量 其中输入参数计划被输入到函数参数内的确定索引中 此外 出于安全考虑 我不会使用 运算符来进行成员访问 如何使用 at 函数来访问 2D 向量的索引 如下所示 vector
  • 如何正确显示孟加拉语文本

    我有一个JTextArea我需要在其中显示孟加拉语文本 例如 但我只能看到长方形的盒子 如何正确显示孟加拉语字符 首先采用孟加拉 unicode 支持的字体 例如 Font banglaFont new Font Arial Unicode
  • os.sched_getaffinity(0) 与 os.cpu_count()

    所以 我知道标题中两种方法的区别 但不知道实际含义 据我了解 如果您使用的 NUM WORKERS 数量多于实际可用的核心数量 您将面临性能大幅下降 因为您的操作系统不断地来回切换 试图保持并行 不知道这有多真实 但我在某处从比我聪明的人那
  • PowerShell ScriptBlock 到底是什么

    PowerShell ScriptBlock 不是词汇闭合因为它不会关闭其声明环境中引用的变量 相反 它似乎利用了动态作用域和自由变量 这些变量在运行时绑定在 lambda 表达式中 function Get Block b PowerSh
  • MarshmallowrelativeLayout 与alignBaseline 的行为很奇怪

    在 Android 6 0 Marshmallow 上 EditText 相对于具有基线和layout alignBaseline 属性的RelativeLayout 中的ImageView 的定位不再起作用 甚至可以在 Android s
  • 使用“as”进行 TypeScript 转换[重复]

    这个问题在这里已经有答案了 我试图塑造一个类型any为布尔值 所以我简单地这样做了 let a
  • Google 日历 API、RRULE 和 EXDATE

    我正在尝试使用 API 将一些事件导出到 Google Calendar 特别是包装它的 python 库 这些事件会重复发生 这是使用 RRULE 字符串定义到 Google 日历的 并且我尝试使用 EXDATE 字符串排除某些日期 这是
  • POST 内容长度超出限制

    当用户上传文件时 我在 php 的 error log 中收到类似的错误 PHP 警告 POST 内容长度 11933650 字节超出了第 0 行未知中 8388608 字节的限制 在我的 php ini 在 public html 中创建
  • 如何用C#创建CSV Excel文件? [关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我正在寻找用于创建 CSV Excel 文件的课程 预期功能 使用极其简单 转义逗号和引号 以便 excel 可以很好地处理它们 以时区证明格式导出日期和日期时间 你知道有什么类可以做
  • 在构建后事件期间确定程序集版本

    假设我想创建一个随每个版本一起提供的静态文本文件 我希望使用发行版的版本号更新该文件 如中指定的 AssemblyInfo cs 但我不想手动执行此操作 我希望我可以使用构建后事件并将版本号提供给批处理文件 如下所示 call foo ba
  • 如何将角度日期转换为另一个时区

    我在用Date 获取本地时区的当前时间 我已将其格式化如下 this today new Date from new DatePipe en Us transform this today dd MM yyyy hh mm ss 现在我想转
  • 添加自定义 LinearLayout 时 Android 布局预览器抛出错误

    我定义了一个自定义 ViewGroup 来扩展 LinearLayout 的功能 public class TestLayout extends LinearLayout public TestLayout Context context
  • iOS 10 中的 sqlite3_prepare_v2 exc_bad_access

    我在我的 iOS 项目中使用 sqlite 作为数据库 在 iOS 9 中 一切都运行良好 现在我已经更新了新的 Xcode 但应用程序在 sqlite3 prepare v2 处多次崩溃 另外 我不会超时关闭数据库 并且只打开一次 我在下
  • 如何在正则表达式中使用变量?

    我想创建一个String replaceAll JavaScript 中的方法 我认为使用正则表达式是最简洁的方法 但是 我不知道如何将变量传递给正则表达式 我已经可以做到这一点 这将替换所有实例 B with A ABABAB repla
  • 通过索引查询LIKE%MYSQL搜索速度慢

    我的表有 100 000 000 行 非常大 表的结构 id int INDEX not primary not unique just index lang index varchar 5 INDEX name varchar 255 I