维护索引和表

  即使使用正确的类型创建了表并加上了合适的索引,工作也米有结束:还需要韦斌表和所以你来确保他们都正常工作。维护表有三个主要的目的:找到并修复损坏的表,维护准确的索引统计信息,减少碎片。

  找到并修复损坏的表

  更新索引统计信息 records_in_range()和 info()

  减少索引和数据的碎片化

  

  总结

  在MySQL中大多数情况下都会使用b-tree索引。其他类型的索引大多只适用于特殊的盲目的。如果在核实的场景中使用索引,将会大大提高查询的响应时间3.

  在选择索引和编写利用这些索引的查询时,有如下撒个原则需要记住:

  1 单行访问是很慢的。特备是在机械硬盘存储中。如果服务器从存储中读取了一个数据块只是为了获取其中的一行,那么久浪费了很多工作。最好读取块中能包含尽肯能多所需要的行。使用索引可以创建位置引用以提升效率。

  2 按顺序访问范围数据是很快的,这有两个原因。第一,顺序io不需要多次磁盘寻道,所以比随机io要快得多。第二,如果服务器能够按需要顺序读取数据,那么久不在需要额外的排序操作,并且group by 查询也无需再最排序和将行按组进行聚合计算了。

  3 索引覆盖查询是很快的。如果一个素银包含了查询需要的所有列,那么存储引擎就不需要再回表找行。这避免了大量的单行访问,而上面的第一点已经写明单行访问是很慢的。

时间: 2024-10-24 23:06:03

维护索引和表的相关文章

堆组织表,索引组织表和索引聚簇表

--- 堆组织表就不说了,其索引中记录了记录所在位置的rowid,查找的时候先找索引,然后再根据索引rowid找到块中的行数据 索引组织表,其行数据以索引形式存放,因此找到索引,就等于找到了行数据. -- 堆组织表的数据是散放的,索引和表的数据是分离的 索引组织表的索引和数据是在一起的 -- 堆组织表的存储速度因为不用考虑排序, 所以存储速度会比较快. 但是要查找符合某个条件的记录, 就必须得读取全部的记录以便筛选.而这个时候为了加快查询速度, 索引就出现了, 索引是针对少量特定字段的值拿出来进

[转帖]堆组织表,索引组织表和索引聚簇表

https://www.cnblogs.com/youngerger/p/8446399.html --- 堆组织表就不说了,其索引中记录了记录所在位置的rowid,查找的时候先找索引,然后再根据索引rowid找到块中的行数据 索引组织表,其行数据以索引形式存放,因此找到索引,就等于找到了行数据. -- 堆组织表的数据是散放的,索引和表的数据是分离的 索引组织表的索引和数据是在一起的 -- 堆组织表的存储速度因为不用考虑排序, 所以存储速度会比较快. 但是要查找符合某个条件的记录, 就必须得读取

SQL Server索引的维护 - 索引碎片、填充因子 <第三篇>

实际上,索引的维护主要包括以下两个方面: 页拆分 碎片 这两个问题都和页密度有关,虽然两者的表现形式在本质上有所区别,但是故障排除工具是一样的,因为处理是相同的. 对于非常小的表(比64KB小得多),一个区中的页面可能属于多余一个的索引或表---这被称为混合区.如果数据库中有太多的小表,混合区帮助SQL Server节约磁盘空间. 随着表(或索引)增长并且请求超过8个页面,SQL Server创建专用于该表(或索引)的区并且从该区中分配页面.这样一个区被称为统一区,它可以为多达8个相同表或索引的

SQL Server 索引和表体系结构(三)

原文:SQL Server 索引和表体系结构(三) 包含列索引 概述 包含列索引也是非聚集索引,索引结构跟聚集索引结构是一样,有一点不同的地方就是包含列索引的非键列只存储在叶子节点:包含列索引的列分为键列和非键列,所谓的非键列就是INCLUDE中包含的列,至少需要有一个键列,且键列和非键列不允许重复,非键列最多允许1023列(也就是表的最多列-1),由于索引键列(不包括非键)必须遵守现有索引大小的限制(最大键列数为 16,总索引键大小为 900 字节)的要求所以引进了包含列索引. 正文 创建包含

转: SQL Server索引的维护 - 索引碎片、填充因子

转:http://www.cnblogs.com/kissdodog/archive/2013/06/14/3135412.html 实际上,索引的维护主要包括以下两个方面: 页拆分 碎片 这两个问题都和页密度有关,虽然两者的表现形式在本质上有所区别,但是故障排除工具是一样的,因为处理是相同的. 对于非常小的表(比64KB小得多),一个区中的页面可能属于多余一个的索引或表---这被称为混合区.如果数据库中有太多的小表,混合区帮助SQL Server节约磁盘空间. 随着表(或索引)增长并且请求超过

SQL Server 索引和表体系结构(包含列索引)

原文:SQL Server 索引和表体系结构(包含列索引) 包含列索引 概述 包含列索引也是非聚集索引,索引结构跟聚集索引结构是一样,有一点不同的地方就是包含列索引的非键列只存储在叶子节点:包含列索引的列分为键列和非键列,所谓的非键列就是INCLUDE中包含的列,至少需要有一个键列,且键列和非键列不允许重复,非键列最多允许1023列(也就是表的最多列-1),由于索引键列(不包括非键)必须遵守现有索引大小的限制(最大键列数为 16,总索引键大小为 900 字节)的要求所以引进了包含列索引. 正文

MySQL InnoDB 索引组织表 & 主键作用

InnoDB 索引组织表 一.索引组织表定义 在InnoDB存储引擎中,表都是根据主键顺序组织存放的,这种存储方式的表称为索引组织表(index organized table IOT). 在InnoDB存储引擎中,每张表都有个主键(Primary key),如果在创建表时没有地定义主键,则InnoDB存储引擎会选择表中符合条件的列去创建主键. 条件: 1.  首先判断表中是否有非空的唯一索引(Unique NOT NULL),如果有,则该列即为主键. 2. 如果不符合上述条件,InnoDB存储

SQL 撤销索引、表以及数据库

通过使用 DROP 语句,可以轻松地删除索引.表和数据库. SQL DROP INDEX 语句 我们可以使用 DROP INDEX 命令删除表格中的索引. 用于 Microsoft SQLJet (以及 Microsoft Access) 的语法: DROP INDEX index_name ON table_name 用于 MS SQL Server 的语法: DROP INDEX table_name.index_name 用于 IBM DB2 和 Oracle 语法: DROP INDEX

索引组织表

select * from aa where id=1; 如果在id列建立索引,那么他会首先在索引块中找到该记录的rowid,然后再进行回表读, 如果要查询索引以外的列,那么回表读是不可避免的. 但是建立索引组织表就可以避免回表读 试验 索引组织表的最大特点就是表就是索引,索引就是表,这个一种特别的设计,所以不用访问表 不过这种表的开销要比普通表的开销大. 因为表要和索引一样要有序的排列,更新负担会很严重,因此这种设计一般使用在更新很少,频繁读的的应用场合 比如地区配置表,这种表数据一般很少变动