Mysql - “选择类似”不使用索引

2023-11-23

我一直在研究MySQL(5.5.24,WinXP)上的索引,但我找不到服务器在运行时不使用一个索引的原因。LIKE用来。

例子是这样的:

我创建了一个测试表:

create table testTable (
  id varchar(50) primary key,
  text1 varchar(50) not null,
  startDate varchar(50) not null
) ENGINE = innodb;

然后,我添加了一个索引startDate。 (请不要问为什么该列是文本而不是日期时间。这只是一个简单的测试):

create index jeje on testTable(startdate);
analyze table testTable;

之后,我添加了近 200,000 行,其中开始日期有 3 个可能的值。 (各占三分之一的出场次数..近70,000次)

所以,如果我运行EXPLAIN像这样的命令:

explain select * from testTable use index (jeje) where startDate = 'aaaaaaaaa';

答案如下:

id = 1
select_type = SIMPLE
type = ref
possible_keys = jeje
key = jeje
rows = 88412
extra = Using where

因此,使用了密钥,行数接近 200,000/3,所以一切正常。

问题是,如果我将查询更改为:(只需将“=”更改为“LIKE”):

explain select * from testTable use index(jeje) where startDate LIKE 'aaaaaaaaa';

在这种情况下,答案是:

id = 1
select_type = SIMPLE
type = ALL
possible_keys = jeje
key = null
rows = 176824
extra = Using where

因此,索引现在没有被使用(键为空,并且行接近完整表......如 type=all 所示)。

MySQL 文档说 LIKE 确实使用了索引。

那么,我在这里没有看到什么?哪里有问题?

感谢您的帮助。


如果索引导致对超过 30% 的表行的访问,MySql 可以忽略索引。 您可以尝试 FORCE INDEX [index_name],它在任何情况下都会使用索引。

sysvar_max_seeks_for_key 的值也会影响是否使用索引:

  • http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_max_seeks_for_key

    尝试将此值更改为较小的数字。

在 SO 上搜索类似的请求。

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

Mysql - “选择类似”不使用索引 的相关文章

  • 如何让 mysql 输出 DateTime 到儒略日数?

    基本上我正在使用用于 Ruby 的 MySQL gem http www tmtm org en mysql ruby 并且我对日期比较没有合理的支持 这Mysql Time类只为我提供了访问器方法 如年 月 秒等 如果我可以将其转换为 R
  • 创建用于存储高尔夫球成绩的可扩展数据库架构

    我正在尝试设计一个数据库来存储我所有的朋友和我的高尔夫球成绩 您可能知道 高尔夫得分由 18 洞的个人得分组成 我可以想到两种设计模式的方法 创建一个表 每个洞有一列 例如 h1 到 h18 该表具有引用其他表的 FK player id
  • 如何在具有动态列的表中插入值 Jdbc/Mysql

    我想在具有动态列的表中添加值 我设法创建一个包含动态列的表 但我不知道如何插入数据 Create Table sql CREATE TABLE MyDB myTable level INTEGER 255 int columnNumber
  • 会话 bean 中的 EntityManager 异常处理

    我有一个托管无状态会话 bean 其中注入了 EntityManager em 我想做的是拥有一个具有唯一列的数据库表 然后我运行一些尝试插入实体的算法 但是 如果实体存在 它将更新它或跳过它 我想要这样的东西 try em persist
  • 使用 PHP 查询更改表,列名未显示在 phpMyAdmin 中

    这是我的第一篇文章 这里有一篇类似的文章 phpMyAdmin 不显示添加的列 代码日志 https stackoverflow com questions 12960302 phpmyadmin doesnt show added col
  • mySQL 基于不同表的 SELECT(计数)更新表

    我有一个课程表和一个科目表 CLASS class id class name subject id date time imagine some rows here SUBJECT subject id subject name curr
  • 用Java将图像添加到数据库

    我正在尝试将图像添加到 mysql 数据库中的 BLOB 字段 图像大小将小于 100kb 但是我遇到了问题 想知道将这些数据添加到数据库的更好方法是什么 com mysql jdbc MysqlDataTruncation 数据截断 第
  • 如何在pandas中将字符串转换为没有日期的日期时间

    例如issue d数据框中的列是字符串 df issue d Dec 2012 我想将字符串转换为日期时间类型而不是字符串类型 2012 12 怎么做 I use datetime strptime x b Y for x in df is
  • MySQL:用户对数据库的访问被拒绝

    我正在尝试在 Heroku 上的远程 SQL 服务器上创建一个数据库 clearDB 我与此联系 mysql host lt
  • SQL DML:日期值不正确 (MySQL)

    我在数据库中创建了一个表 CREATE TABLE official receipt student no INT UNSIGNED academic year CHAR 8 trimester ENUM 1 2 3 or no MEDIU
  • 为通用字符选择表排序规则

    我正在开发一个需要存储通用字符的后端 我选择了utf8mb4用于此目的的表编码 我还必须选择表格排序规则 最直接的选择是选择utf8mb4 general ci表整理 除了一般的排序规则之外 还有大约20种其他排序规则可供选择 更具体的排序
  • 使用单个查询和每用户密码盐进行用户登录

    我决定使用存储在数据库中的每用户盐来实现用户登录 盐作为密码的前缀 该密码使用 SHA 进行哈希处理并存储在数据库中 过去 当我不使用盐时 我会使用典型的方法 使用用户输入的用户名和密码来计算查询返回的行数 然而 对于每个用户的盐 您需要先
  • 在 MySQL 表中存储用户密码的最佳 PHP 哈希方法?

    我已经阅读 Stack Overflow 问题大约 15 分钟了 每一个问题似乎都与我之前读到的问题相矛盾 Bcrypt SHA1 MD5 等 我目前对我的密码进行 MD5 但我想让我的数据库在发生泄露时更加安全 我知道这个问题已经被问了一
  • 更新或插入 MySQL Python

    如果记录已存在 我需要更新一行 如果不存在 我需要创建一个新记录 我理解 ON DUPLICATE KEY 将使用 MYSQLdb 完成此操作 但是我无法使其正常工作 我的代码如下 cursor database cursor cursor
  • Pandas 使用什么规则来生成视图和副本?

    我对 Pandas 在决定数据帧中的选择是原始数据帧的副本或原始数据帧的视图时使用的规则感到困惑 例如 如果我有 df pd DataFrame np random randn 8 8 columns list ABCDEFGH index
  • 规范“毒”方式真的值得吗? (3NF)

    我正处于数据库设计的早期阶段 所以还没有最终的结果 并且我正在为具有可选标签的线程使用 TOXI 3表设计 但我忍不住觉得加入是并不是真的必要 也许我只需要依赖我的简单标签列posts我可以在其中存储类似 varchar 的表
  • MySQL:更新所有行将字段设置为0,但将一行的字段设置为1

    是否有一种有效的方法将行字段的选择更新为 0 但根据 ID 将其中一行设置为 1 基本上 我在数据库中有多个对象 我想在其中一个 inuse 之间切换 因此查询将其中一行 按 id 设置为 inuse 1 将其他行设置为 inuse 0 谢
  • 如何使用 pandas 对一系列值进行编码

    我有一个 pandas 数据框并且有一列age 我想将其编码为按特定范围分隔的分类值 例如 15岁以下的年龄应为0 15到30之间的年龄应更改为1等等 我找到了这种方法来做到这一点 在经历了关于使用的巨大困惑之后 and and age X
  • 向 yahoo 和 hotmail 用户发送电子邮件?

    我正在使用 php 和 mysql 每次用户在我的网站上注册时 我都会使用 php mail 发送一封电子邮件进行身份验证 最近我发现 很多Yahoo和Hotmail用户还没有激活他们的帐户 假设 1000 个用户中 只有 200 个被激活
  • 未找到教义列:1054“字段列表”中未知列“s.features”

    我在站点表中添加了一个新列 features 并使用 Doctrine 重新生成了模型 此代码导致错误 siteTable Doctrine Core getTable Site site siteTable gt findOneByNam

随机推荐

  • 如何在 Cloud Firestore 中移动文档?

    有人可以帮助我如何在 Cloud Firestore 中重命名 移动或更新文档或集合名称吗 另外 我是否可以访问我的 Cloud Firestore 以从终端或任何应用程序更新我的集合或文档 其实没有move方法允许您简单地将文档从一个位置
  • 在 Eclipse 中选择远程系统类型列表为空

    我想在 Eclipse Luna 中进行交叉编译 Windows gt Linux 但是当我想在远程系统视图中添加连接时列表为空 我已经在 Eclipse 中安装了最新的 RSE 也许我错过了一个我还不知道的重要点 这就是为什么它是空的 有
  • 如何使用 Rhino Mocks 来模拟 HttpContext.Application

    我是 Mocking 框架的新手 并开始使用 RhinoMocks 来协助我的 MVC 应用程序单元测试 我在用着Scott Hanselmanns MVC 模拟助手协助模拟 HttpContext 我已经成功地 一段时间后 模拟了一些我需
  • 在 Rails 中,如何使用视图呈现 JSON?

    假设您在 users 控制器中 并且想要获取 show 请求的 json 响应 如果您可以在 views users 目录中创建一个名为 show json 并在 users show 之后的文件 那就太好了操作完成 它呈现文件 目前您需要
  • css中direction和text-align的区别

    两者有什么区别 方向 右转 文本对齐 右对齐 相关this问题 方向从右到左对元素进行排序 Example div div style display inline block A div div style display inline
  • 处理与 R 的数据库交互中的字段类型

    我使用 RMySQL 和 MySQL 数据库来存储我的数据集 有时数据会被修改 或者我也会将结果存储回数据库 长话短说 在我的用例中 R 和数据库之间有相当多的交互 大多数时候我使用方便的功能 例如dbWriteTable and dbRe
  • 将 2 个静态库链接到 1 个 iOS 静态库

    我在 Xcode 中创建了两个单独的静态库 用于在 iOS 上使用 A 和 B A 使用 B 中定义的方法 当创建需要 A 和 B 的新 Xcode 项目时 我可以分别包含它们 然而 为了简化集成 我更喜欢创建一个包含 A 和 B 的通用框
  • “错误:请求‘a’中的成员‘size’,它是指针类型”,但我不认为它是一个指针

    所以 我以为我正在尝试做一些简单的事情 但显然不是 我编写了这个函数 以便以后可以扩展它 并在需要时通过以下方式快速为用户提供菜单menu mystrings int menu string a int choice 0 cout lt l
  • Java 13 SE 规范不需要缓存装箱的 Byte 对象吗?

    阅读JAVA 13 SE规范 我发现在第5章 第5 1 7节 拳击转换有以下保证 如果被装箱的值 p 是计算常数的结果 boolean char short int 或 long 类型的表达式 15 28 以及 结果为 true false
  • 调试 R 中未由包导出的函数

    我想逐步使用debug or trace 未导出的函数 例如 我该如何做vcov polr包装的MASS 从函数中调用polr polr已导出 但 vcov polr 未导出 也就是说 当我跑步时polr 我希望调试浏览器在代码输入后启动v
  • 生成低位深度的图像文件?

    bpp 每像素位数 因此 32bpp 意味着 R G B A 为 8 8 8 8 就像 NET 有一个枚举 System Drawing Imaging PixelFormat 现在一旦我有一个Bitmap or Image对象与我的图形
  • 如何在WPF中绑定逆布尔属性?

    我所拥有的是一个具有IsReadOnly财产 如果这个属性为真 我想设置IsEnabledButton 上的属性 例如 设置为 false 我愿意相信我可以像IsEnabled Binding Path IsReadOnly 但这不适用于
  • NodeJS readdir 并需要相对路径

    假设我有这个目录结构 Project node modules SomeModule bar js config file json foo js foo js require bar bar js fs readdir config re
  • 清单合并失败错误

    我正在将当前项目的大型应用程序迁移到 Android Studio 和 Gradle 中 我目前陷入以下问题 Error 87 9 Execution failed for task App processDebugManifest gt
  • pip:根据包名称选择索引url?

    我创建了一个本地私有包存储库 按照惯例 所有这些包都以识别前缀命名 例如 foo package 这些包可能依赖于 PyPi 上可用的公共包 我们假设 PyPi 中不存在同名包的风险 通过使用 index url和 一起 extra ind
  • Java 代码未正确更新

    这可能看起来很奇怪 我用 Java 编写了代码 在 Eclipse 中 然后 我对代码做了一些修改 现在 我尝试运行新代码 修改后 但它仍然为我提供之前代码的输出 我在代码中放置了几个调试点 但它跳过了一些调试点 尽管它应该在它们处停止 并
  • 如何将 RFC-1123 日期时间格式化程序转换为本地时间

    我正在获取日期时间Thu 25 Aug 2016 08 59 00 GMT在这个RFC 1123在我的 Android 应用程序中格式化 我需要转换为当地时间 DateTimeFormatter RFC 1123 DATE TIME jav
  • 从 sockaddr * 转换为 sockaddr_in * 增加了所需的对齐方式

    当我使用一些看起来像这样的代码时 编译器会产生此警告 for p res p NULL p p gt ai next void addr std string ipVer IPv0 if p gt ai family AF INET ipV
  • 关于 Rails 中的演示者模式。有更好的方法吗?

    我的模型中有 def presenter presenter ProfilePresenter new self presenter end ProfilePresenter 是一个类 它具有 get link get img url si
  • Mysql - “选择类似”不使用索引

    我一直在研究MySQL 5 5 24 WinXP 上的索引 但我找不到服务器在运行时不使用一个索引的原因 LIKE用来 例子是这样的 我创建了一个测试表 create table testTable id varchar 50 primar