zoukankan      html  css  js  c++  java
  • 14.9.4 Defragmenting a Table 整理表

    14.9.4 Defragmenting a Table   整理表
    
    随机的插入或者从一个 secondary index 删除会导致index变的 破碎。
    
    
    碎片意味着 index pages物理的顺序在磁盘上和记录在pages里的index 顺序不接近,
    
    
    或者有很多的没有使用的Pgaes 在64-page blocks 分配给索引
    
    
    碎片化的征兆是 一个表占据更多的空间 相比它应该占用的大小, 究竟是多少,
    
    
    是很难确定的。所有的InnoDB 数据和Indexes 是存储在B-trees,它们的填充因子可能从50%到100%
    
    
    另外一个碎片的征兆是一个表扫描 花费更长的时间。
    
    
    SELECT COUNT(*) FROM t WHERE non_indexed_column <> 12345;
    
    
    前面的查询需要MySQL 执行一个全表扫描, 对于一个大表最慢的查询方式
    
    
    为了加快所有扫描,你可以周期性的执行一个 "null" ALTET TABLE操作,
    
    会让MySQL 重建表:
    
    ALTER TABLE tbl_name ENGINE=INNODB
    
    
    在MySQL 5.6.3,你可以使用 ALTER TABLE tbl_name FORCE来执行一个"null" alter 操作来重建表,
    
    先前的FORCE 选项是有效的但是可以忽略
    
    
    在MySQL 5.6.17,ALTER TABLE  tbl_name ENGINE=INNODB 和 ALTER TABLE  tbl_name FORCE 
    
    
    使用online DDL(ALGORITHM=COPY).
    
    
    另一种方式执行一个碎片操作是使用mysqldump 来dump 表到文件,删除表,重新从备份加载。
    
    
    
    
    如果插入到一个index总是向上的 记录总是在最后端删除,InnoDB 文件管理算法强制 碎片在索引上不发生。
    
    
    
    
    
    
    
    
    
    
    
    

  • 相关阅读:
    Android编译系统
    Android指针管理:RefBase,SP,WP
    Android图片异步加载
    Android动画学习笔记Android Animation
    触发checkbox的click事件时遇到的问题
    C++ Primer笔记
    Android自定义对话框(Dialog)位置,大小
    android startService流程梳理笔记
    自定义SimpleAdapter
    Android Touch事件
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13351153.html
Copyright © 2011-2022 走看看