首页 > 解决方案 > 提高表性能的最佳实践是什么?

问题描述

为了保持表和索引的效率,不建议直接运行“OPTIMYZE TABLE”(如下面的链接所述),那么最佳做法是按照以下确切顺序执行吗?

  1. DROP 外键(为了删除相关索引)
  2. DROP 索引(复合和非复合)
  3. 执行优化表
  4. 添加索引
  5. 添加外键
  6. 分析表

我相信这最后一步(分析表)对于更新 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 ; 

标签: mysql

解决方案


你觉得有什么改善吗?我对此表示怀疑。在大多数情况下,InnoDB 负责保持其 BTrees 干净“足够”。运行 anOPTIMIZE TABLE只能在短时间内提供很小的改进。

还有其他的事情要看。例子:

  • index i1(c1)是不必要的,因为你也有unique index i2(c1, c2).
  • 如果您PRIMARY KEY(id)考虑将该唯一索引升级到PRIMARY KEY(c1, c2).
  • FOREIGN KEYs每次插入都要花一些钱;你真的需要它们吗?
  • 您是否盲目使用BIGINT何时可能SMALLINT就足够了?

推荐阅读