MySQL回表的性能消耗是多少
技术百科
王林
发布时间:2023-05-26
浏览: 次 1 回表的性能消耗
无论单列索引 还是 联合索引,一个索引就对应一个独立的b+索引树,索引树节点仅包含:
索引里的字段值
主键值
即使根据索引树按条件找到所需数据,也仅是索引里的几个字段的值和主键值,万一你搞个select *,那就还得其他字段,就需回表,根据主键到聚簇索引里找,聚簇索引的叶节点是数据页,找到数据页才能把一行数据所有字段值读出来。
所以类似
select * from table order by xx1,xx2,xx3
得从联合索引的索引树里按序取出所有数据,接着对每条数据都走一个主键的聚簇索引查找,性能不高。
有时MySQL执行引擎可能认为,你要是类似
select * from table order by xx1,xx2,xx3
相当于得把联合索引和聚簇索引,两个索引的所有数据都扫描一遍,那还不如不走联合索引,直接全表扫描得了,这样就只需扫描一个主键索引。
但若形如:
select * from table order by xx1,xx2,xx3 limit 10
那执行引擎就知道你先扫描联合索引的索引树,拿到10条数据,接着对10条数据在聚簇索
引里查找10次即可,那就还是会走联合索引。
2 覆盖索引
覆盖索引不是一种索引,只是一种基于索引查询的方式,即针对类似
select xx1,xx2,xx3 from table order by xx1,xx2,xx3
仅需联合索引里的几个字段的值,那就只需扫描联合索引的索引树,无需回表找其它字段,这种查询方式就是覆盖索引。
所以当你使用联合索引时,注意是否可能会导致大量回表到聚簇索引,若回表聚簇索引的次数太多,可能就直接给你做*表扫描而不走联合索引了。
尽可能还是在SQL里指定你仅需要的字段,而不要暴力select *,最好直接走覆盖索引。
即使无可避免地要回表,你也尽可能用limit、 where限定一下回表的次数,就从联合索引里筛选少数数据,再回表,这样性能好一点。
# 是在
# 几个
# 太多
# 那就
# 当你
# 所需
# 只需
# 你也
# mysql
# 主键
# 不走
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- PythonGIL机制理解_多线程限制解析【教程】
- Win10怎样卸载DockerDesktop_Wi
- php错误怎么开启_display_errors与
- php订单日志怎么按状态筛选_php筛选不同状态订
- 如何在 Laravel 中通过嵌套关联关系进行 o
- Win11如何设置开机自动联网 Win11宽带连接
- Mac如何开启夜览模式_Mac护眼模式设置与定时
- Win11怎么更改文件夹图标_自定义Win11文件
- Win11讲述人怎么关闭_Win11误触开启语音朗
- 如何使用Golang table-driven f
- 如何使用Golang recover捕获panic
- C++如何获取CPU核心数?(std::threa
- C++如何使用std::optional?(处理可
- 如何在 Go 中正确反序列化多个同级 XML 元素
- 微信里的php文件怎么变mp4_微信接收php转m
- Win11怎么关闭防火墙通知_屏蔽Win11安全中
- 如何在Golang中处理模块包路径变化_Golan
- MAC怎么解压RAR格式文件_MAC第三方解压工具
- MySQL 中使用 IF 和 CASE 实现查询字
- c++获取当前时间戳_c++ time函数使用详解
- Win11怎么设置闹钟_Windows 11时钟应
- Win10如何关闭安全中心所有通知 Win10禁用
- Python数据挖掘核心算法实践_聚类分类与特征工
- mac怎么打开终端_MAC终端Terminal使用
- Win11怎么更改鼠标指针方案_Windows11
- c# F# 的 MailboxProcessor
- 如何使用Golang template生成文本模板
- Windows怎样关闭开始菜单推荐广告_Windo
- 如何在JavaScript中动态拼接PHP的bas
- Win11系统占用空间大怎么办 Win11深度瘦身
- 为什么本地php环境运行php脚本卡顿_php执行
- Python数据抓取合法性_合规说明【指导】
- Win11怎么激活Windows10_Win11激
- php8.4如何调用com组件_php8.4win
- c++中的Tag Dispatching是什么_c
- 如何在Golang中实现RPC异步返回_Golan
- php中$this和::能混用吗_对象与静态作用域
- PHP主流架构怎么处理表单验证_规则与自定义【技巧
- 如何在Golang中实现服务熔断与限流_Golan
- Python字符串处理进阶_切片方法解析【指导】
- Win10电脑怎么设置网络名称_Windows10
- Mac自带的词典App怎么用_Mac添加和使用多语
- Win11怎么查看wifi信号强度_检测Windo
- php485读数据时阻塞怎么办_php485非阻塞
- 如何在同包不同文件中正确引用 Go 结构体
- 如何在Golang中处理云原生事件_使用Event
- MAC如何安装Git版本控制工具_MAC开发环境配
- Win10如何卸载WindowsDefender_
- Mac怎么设置登录项_Mac管理开机自启动程序【教
- 如何提升Golang JSON序列化性能_Gola

QQ客服