通过索引查询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搜索速度慢 的相关文章

  • MySQL 和 Hibernate 之间的主键自增由谁负责?

    MySQL CREATE TABLE role id role INT 11 unsigned NOT NULL AUTO INCREMENT PRIMARY KEY id role AUTO INCREMENT 1 休眠 Entity p
  • 为什么 Python 中的无分支函数和内置函数速度较慢?

    我发现了 2 个无分支函数 它们可以在 python 中查找两个数字的最大值 并将它们与 if 语句和内置 max 函数进行比较 我认为无分支或内置函数将是最快的 但最快的是 if 语句函数 有人知道这是为什么吗 以下是功能 If 语句 2
  • 优化我的表现

    我正在开发一个使用 Zend Framework 1 11 Doctrine 2 一些 Symfony 2 组件以及其他工具和库的项目 我正在尝试使用 Xdebug 和 Webgrind 优化性能 我已经发现了一些瓶颈 例如解析 Ini 配
  • 只获取倒数第二条记录 - mysql-query

    我有一个如下表记录 my table id rating description 1 0 0 bed 2 1 0 good 3 0 0 bed 4 1 0 good 5 0 0 bed 6 0 0 bed 7 0 0 bed 现在我通过评级
  • libmysqlclient.a 和 libmysqlclient_r.a 有什么区别?

    我应该使用哪个来链接 mysqlclient 库 它们之间有什么区别 我似乎找不到答案 谢谢 较新版本的 MySQL 客户端发行版不包含 r 版本 有些可能有从 libmyqslclient r a 到 libmyqslclient a 的
  • 每月获取记录,但如果该月没有记录,则为零

    如果我有以下 SQL 表 Tests id type receiveDate 1 Blood 2012 01 18 2 Blood 2012 01 20 3 Blood 2012 01 18 4 Blood 2012 03 01 5 Blo
  • PHP 和 MySQL - 高效处理多个一对多关系

    我正在寻求一些有关使用 MySQL 和 PHP 检索和显示数据的最佳方法的建议 我有 3 个表 所有一对多关系如下 Each SCHEDULE有很多覆盖每个覆盖都有很多地点 我想检索这些数据 以便它可以全部显示在单个 PHP 页面上 例如列
  • 无法在 Mac 上启动 MySQL

    使用 Brew 安装后 我无法运行 MySQL 我使用的是 OS X El Capitan 版本 10 11 3 和 MySQL Server 版本 5 7 11 当我启动服务器时 我收到 启动 MySQL 错误 服务器退出而不更新 PID
  • 非常大的字段会对 MySQL 数据库产生负面影响吗?

    我目前正在使用 Django 构建一个网站 并希望托管用户生物样式页面 该页面可能长达几 KB 这些字段不一定需要搜索 但在查找用户名时确实需要提供 将这些数据存储在数据库中会产生负面影响吗 如果我使用带有数据库链接的静态文本文件 我的服务
  • 如何在 SEQUELIZE (nodeJS) 中创建触发器?

    我正在尝试使用sequelize 创建一个触发器 主要思想是创建一个实例CONFIG创建后USER USER MODEL module exports function sequelize DataTypes var User sequel
  • PHP MySql 百分比

    我的问题是关于百分比 我不是专家 所以我会尽力以更好的方式进行解释 我的 mysql 服务器中有一个表 假设有 700 条记录 如下所示 Name country language Birth Lucy UK EN 1980 Mari Ca
  • 1.2.840.113556.1.4.1941 (LDAP_MATCHING_RULE_IN_CHAIN) 存在性能问题?

    LDAP 搜索有一些内置规则 其中之一是LDAP MATCHING RULE IN CHAIN From MSDN https msdn microsoft com en us library aa746475 v vs 85 aspx 1
  • Elasticsearch 无法更新非动态设置

    我正在尝试创建一个测试分析器来试验弹性搜索的分析 我创建了一个名为 mytest 的索引 该索引可用且可搜索 但是当我尝试创建自定义分析器时 出现以下错误 error ElasticsearchIllegalArgumentExceptio
  • 如何检测Mysql/innodb中的死锁?

    我知道在 Innodb 中使用事务时不可避免地会发生死锁 并且如果应用程序代码正确处理死锁 它们是无害的 正如手册所说 只需再试一次 所以我想知道 如何检测死锁 死锁是否会发出一些特殊的 mysql 错误号 如果重要的话 我正在使用 PHP
  • 到 ToList() 还是不到 ToList()?

    给定一个在记忆中 不是 LINQ to SQL 类列表 List
  • mysql自动存储记录创建时间戳

    mysql 有什么方法可以在创建记录时自动将时间戳存储在记录行中 我试图使用时间戳 数据类型 和 current timestamp 作为默认值 但后来意识到每次更新记录时都会更新 我只需要一些可以存储创建时间戳的东西 Thanks Set
  • 会话重新启动后 AVcapture 会话启动缓慢

    我有一个主视图控制器 它连接到具有 avcapturesession 的第二个视图控制器 我第一次从主视图控制器转向捕获会话控制器 大约需要 50 毫秒 使用 仪器 检查 然后我从捕获会话返回到主视图控制器 然后从主控制器返回到 avcap
  • mysql排序和排名语句

    我需要一些 mysql 语句的帮助 我的表 1 有 7 列 表 2 有 8 列 额外的列名为排名 我的语句应该是这样的 从表 1 中选择全部 然后按 用户数 排序 将其插入表 2 中并排名开始 1 2 3 等 table 1 usernam
  • 是否可以使用“git gc”来打包引用日志对象?

    正如答案所暗示的https stackoverflow com a 32025729 https stackoverflow com a 32025729我已经配置了远程裸仓库 git config gc pruneExpire never
  • 计算 Richtextbox 中所有单词的最有效方法是什么?

    我正在编写一个文本编辑器 需要提供实时字数统计 现在我正在使用这个扩展方法 public static int WordCount this string s s s TrimEnd if String IsNullOrEmpty s re

随机推荐

  • 如何在 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