MySQL重建表统计信息


背景

最近一段时间遇到了一些性能问题
发现很多其实都是由于 数据库的索引/统计信息不准确导致的问题.
Oracle和SQLServer都遇到了很多类似的问题. 我这边联想到 MySQL也经常会出现卡顿的问题,
所以想验证一下 MySQL如果重建表索引后不知道会不会好一些.

重建的方法

MySQL官方资料里面最简单的重建方法是:
alter table tablename engine=innodb ; 网上有很多来源:
https://geek-docs.com/mysql/mysql-ask-answer/356_mysql_how_can_i_rebuild_indexes_and_update_stats_in_mysql_innodb.html
https://dev.mysql.com/doc/refman/8.0/en/rebuilding-tables.html 感觉如果写SQL的话太麻烦了. 不如一个命令直接执行. mysql -uroot -pTestxxxx -D myapp2206mysql0721 <<EOS
SELECT CONCAT('ALTER TABLE ', table_name , ' ENGINE=INNODB ;') FROM information_schema.tables WHERE table_schema="myapp2206mysql0721" and table_type='BASE TABLE' INTO OUTFILE '/tmp/mysqlrebuild.sql' ;
source /tmp/mysqlrebuild.sql
EOS 可以通过这个命令直接执行数据库的表重建动作. 需要注意 ,需要先修改一下 my.conf 增加上可以进行 into outfile的处理参数
secure_file_priv = /tmp/ 修改完成后需要重启数据库.

关于数据库表的区别

PG数据库所有的表都是 堆组织表, 又称之为 HOT PG仅支持堆表
Oracle和SQLServer 其实大部分都是 堆组织表, 但是他们也支持堆组织表和局促表等存储模式
MySQL数据库的innodb存储引擎不支持堆表, 仅支持索引组织表 也就是IOT 这两种表的存储模式各有优缺点
堆表(heap table)和索引组织表(Index Oragnization Table,简称IOT)是两种数据表的存储结构。
pg中的表是堆表。mysql Innodb引擎中的表是索引组织表。oracle中既支持堆表,也支持索引组织表。 在具体介绍堆表和索引组织表之前,我们先看下pg中index scan和index only scan。
Index Scan: 也即普通索引扫描,对于给定的查询,我们先扫描一遍索引,从索引中找到符合要求的记录的位置(指针),
再定位到表中具体的Page去取。等于是两次I/O,先走索引,再取表记录。
Index only scan: 建立index时,所包含的字段集合,囊括了我们需要查询的字段,
这样就只需在索引中取数据,就不必访问表了。 索引组织表有些明显的好处:
一是节约了磁盘空间,
二是降低了IO,提高了查询的性能。
尤其是当我们的数据几乎总是通过主键来进行搜索时,查询效率的提升将会很显著。 缺点: 当索引组织表上有二级索引,并且频繁使用二级索引进行访问时,它的缺点也很明显了,
那就是二级索引需要回表,它的效率要比堆表直接使用行指针访问数据的效率要低的。 总结一下: 堆表:数据存储在表中,索引存储在索引里,两者分开的。数据在堆中是无序的,
索引让键值有序,但数据还是无序的。堆表中主键索引和普通索引一样的,都是存放指向堆表中数据的指针。 索引组织表:数据存储在聚簇索引中,或者说,数据按照主键的顺序来组织数据,两者合二为一。
主键索引,叶子节点存放整行数据。其他索引称为辅助索引(二级索引),叶子节点存放键值和主键值。 来源: https://www.modb.pro/db/107906

MySQL重建表统计信息的更多相关文章

  1. MySQL InnoDB配置统计信息

    MySQL InnoDB配置统计信息 1. 配置持久化(Persistent)统计信息参数 1.1 配置自动触发更新统计信息参数 1.2 配置每张表的统计参数 1.3 配置InnoDB优化器统计信息的 ...

  2. SQL调优--记一次表统计信息未及时更新导致查询超级慢

                某日同事丢给我一个看上去复杂的查询(实际就涉及两张表,套来套去)说只是换了日期条件,但一个查询5秒出数据,一个根本查不出来.现在整理下解决过程,及涉及的知识点. 若有不正之处, ...

  3. MySQL--查询表统计信息

    ============================================================= 可以用show table status 来查看表的信息,如:show ta ...

  4. db2重组所有表和更新表统计信息

    1.构建db2admin模式下的所有表的重组语句: select ' reorg table '||TABLE_NAME||';' from sysibm.tables where  TABLE_SC ...

  5. mysql获取表列信息、主键信息

    /** * 获取物理表中已存在的列信息 * @param tbName 表名 * @return results 查询结果 */ fun getExistColumnInfo(tbName:Strin ...

  6. 查询mysql数据库表的信息(表大小、数据大小、索引大小)

    select * from information_schema.TABLES where information_schema.TABLES.TABLE_SCHEMA='databasename' ...

  7. 表统计信息(storge)相关

    select t1.NUM_ROWS,t1.BLOCKS,t1.EMPTY_BLOCKS,t1.AVG_SPACE,t1.CHAIN_CNT,t1.AVG_ROW_LEN from user_tab_ ...

  8. Mysql一个表编码的坑,mark一下

    问题:一个sql执行很慢,5分钟左右,关键是最大的表是5万出头,另一张表不到5000原因:是两个表的字符集不同,导致匹配时,没有匹配到 解决办法:将两个表的字符集改成一样具体的命令: ALTER TA ...

  9. SQL2008R2的 遍历所有表更新统计信息 和 索引重建

    [2.以下是更新统计信息] DECLARE UpdateStatisticsTables CURSOR READ_ONLY FOR SELECT sst.name, Schema_name(sst.s ...

  10. MySQL统计信息以及执行计划预估方式初探

    数据库中的统计信息在不同(精确)程度上描述了表中数据的分布情况,执行计划通过统计信息获取符合查询条件的数据大小(行数),来指导执行计划的生成.在以Oracle和SQLServer为代表的商业数据库,和 ...

随机推荐

  1. 痞子衡嵌入式:在i.MXRT1170上快速点亮一款全新LCD屏的方法与步骤(MIPI DSI接口)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在i.MXRT1170上快速点亮一款全新LCD屏的方法与步骤. 我们知道 LCD 屏的接口有很多:DPI-RGB.MIPI DSI.DB ...

  2. IPv6实现内网穿透,极低成本保姆级教程

    摘要 一直想实现内网穿透从而达到随时随地可以连接到自己电脑的目的.尝试过使用一些付费的现成方案,但是价格偏高,而流量少得可怜,只能开放几个固定端口. 实现内网穿透的最大难点就在于拥有一个公网IP,但是 ...

  3. [Luogu 4998 信号塔] 题解报告

    估计没人看的简化版题意: 给定一个数轴,以及数轴上的 \(n\) 个点(这些点可能坐落在同一坐标上),第 \(i\) 个点的坐标为 \(a_i\) .现在要在数轴上找 \(k\) 个点,第 \(i\) ...

  4. Flutter Getx 状态管理 --- (依赖管理) GetxController

    Flutter Getx 简单的状态管理(依赖管理) GetxController Getx 依赖管理简介 Get有一个简单而强大的依赖管理器,它允许你只用1行代码就能检索到与你的Bloc或Contr ...

  5. 5分钟体验代码仓托管、CloudIDE云端代码编辑、调试、运行

    摘要:您将学会如何通过代码托管(CodeHub)创建代码仓,解决软件开发者在跨地域协同.多分支并发.代码版本管理.安全性等方面的问题. 本文分享自华为云社区<5分钟体验代码仓托管.CloudID ...

  6. 云图说丨初识数据工坊DWR

    摘要:数据工坊DWR是一款近数据处理服务,通过易用的工作流编排和开放生态的数据处理算子,能够在云上实现图像.视频.文档.图片等数据处理业务. 本文分享自华为云社区<[云图说]第236期 初识数据 ...

  7. 你知道,java项目中是如何获取文件地址的吗?

    摘要:在java项目中我们经常会读取配置文件,但是文件的路径在获取时我们是怎么得到的?因为我总是忘记获取文件地址的方法,就在此记录一下 本文分享自华为云社区<[Java]Java项目的绝对地址和 ...

  8. DarkMode(3):sass函数实实现深色模式操作

    上文<DarkMode(2):深色模式解决方案--css颜色变量实现Dark Mode>,完全基于样色抽离变量,然后使用预处理其,生成两套样式.切换样式文件. sass自定义函数与mixi ...

  9. 企业诊断屋:二手车交易平台 APP 如何用 AB 测试赋能业务

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 2023年汽车行业新车市场低靡,由新车降价引发的车辆价格波动很快传导到二手车市场,二手车的交易也受到了冲击,收车验 ...

  10. Spring解决泛型擦除的思路不错,现在它是我的了。

    你好呀,我是歪歪. Spring 的事件监听机制,不知道你有没有用过,实际开发过程中用来进行代码解耦简直不要太爽. 但是我最近碰到了一个涉及到泛型的场景,常规套路下,在这个场景中使用该机制看起来会很傻 ...