什么是改善表性能的最佳实践?

时间:2019-10-30 11:20:02

标签: mysql

为了保持表和索引的效率,建议不要直接运行“ 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 ; 

1 个答案:

答案 0 :(得分:1)

您觉得有什么改善吗?我对此表示怀疑。在大多数情况下,InnoDB会保持“足够”清洁其BTree。在短时间内运行OPTIMIZE TABLE只会带来很小的改善。

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

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