mysql - 提高表性能的最佳实践是什么?
问题描述
为了保持表和索引的效率,不建议直接运行“OPTIMYZE TABLE”(如下面的链接所述),那么最佳做法是按照以下确切顺序执行吗?
- DROP 外键(为了删除相关索引)
- DROP 索引(复合和非复合)
- 执行优化表
- 添加索引
- 添加外键
- 分析表
我相信这最后一步(分析表)对于更新 information_schema.statistics 表中的索引基数也很有用。
欢迎对此提出任何更正或进一步的建议!
谢谢
链接:https ://www.percona.com/blog/2010/12/09/mysql-optimize-tables-innodb-stop/
例子:
alter table T1 DROP index i1 ;
alter table T1 DROP index i2 ;
optimize table T1 ;
alter table T1 ADD index i1(c1) ;
alter table T1 ADD unique index i2(c1, c2) ;
analyze table T1 ;
解决方案
你觉得有什么改善吗?我对此表示怀疑。在大多数情况下,InnoDB 负责保持其 BTrees 干净“足够”。运行 anOPTIMIZE TABLE
只能在短时间内提供很小的改进。
还有其他的事情要看。例子:
index i1(c1)
是不必要的,因为你也有unique index i2(c1, c2)
.- 如果您
PRIMARY KEY(id)
考虑将该唯一索引升级到PRIMARY KEY(c1, c2)
. FOREIGN KEYs
每次插入都要花一些钱;你真的需要它们吗?- 您是否盲目使用
BIGINT
何时可能SMALLINT
就足够了?
推荐阅读
- malloc - 如何告诉 LLVM 从多大的堆开始?
- vuejs2 - BootstrapVue b-col 格式在子组件中不起作用
- excel - .NumberFormat 不适用于使用 SUMIFS 的单元格
- node.js - 连接丢失后 Socket.io 不会重新连接 - React Native + Nodejs
- python - Python,“[i]”附近的Sqlite:语法错误错误
- javascript - 这个 JavaScript 表达式是什么意思?
- reactjs - 使用 ReactJS 和 useEffect 单击时无法暂停间隔
- twilio - Twilio 在使用循环重复语音通话时有暂停期
- postgresql - 设置 Kubernetes 集群并运行数据库
- javascript - 我们不能在 React.js 的数组中迭代 material-ui 吗?