mysql - mysql 5.7 是否总是在索引列和“类似模式”是什么时执行解释类型索引?
问题描述
一个面试题:“mysql index什么时候不占用?” 有人说:“当在 like 中使用 '%' 时,'%' 是第一个字符。”
然后我测试了sql,然后感到困惑......
他的意思是1.在某些情况下mysql不使用索引进行搜索
或者
2.遇到'%abc'或'%abc%'时,仍然使用索引但会进行全索引扫描,那么索引就失效了???
解决方案
这是因为 MySQL 不可能索引所有可能的子字符串。它只能处理abc%
前缀类型的查询,因为索引是有序的,所以有时可以使用LIKE
索引来优化查询。
MySQL 的问题EXPLAIN
在于它与其他 RDBMS 平台相比相当薄弱,并且会做出很多猜测,有时甚至是疯狂的猜测。
相比之下,Postgres 会在考虑实际值的情况下为您提供实际查询执行方式的细分。MySQL 倾向于对会发生什么做出最好的猜测,而实际结果可能完全不同。
推荐阅读
- c# - 如何通过单击按钮使表单标题动态更改?
- google-analytics - 谷歌分析活动/来源/媒体未显示
- python - 为什么对 zip() 调用的列表理解会返回一个包含 zip 对象的列表,而不是 zip() 的返回值列表?
- c - 如何将 STDIN 传递给程序并将其输出存储到变量中?C
- jenkins - Jenkins 中的自动部署构建失败
- python - Python - 拖放到终端作为输入?macOS -zsh
- html - 执行两个 url 之一的 webview
- node.js - 显示肥皂响应角
- wpf - 非常规网格状结构,具有灵活的项目大小
- java - 使用 xpath 从肥皂服务获取响应(错误:前缀必须解析为命名空间:soap)