WEB开发网
开发学院数据库MySQL Schema的优化和索引 - 索引和表的维护 阅读

Schema的优化和索引 - 索引和表的维护

 2009-09-02 00:00:00 来源:WEB开发网   
核心提示: 每个存储引擎生成索引的统计数据各不相同,索引你使用ANALYZE TABLE的频率也不同,Schema的优化和索引 - 索引和表的维护(2),同样的消耗成本也不同:Memory存储引擎不会存储索引统计信息, MyISAM在硬盘上存储统计信息,举个例子,如果你可以写一条查询INFORMATION_

每个存储引擎生成索引的统计数据各不相同,索引你使用ANALYZE TABLE的频率也不同,同样的消耗成本也不同:

Memory存储引擎不会存储索引统计信息。

MyISAM在硬盘上存储统计信息,并且ANALYZE TABLE执行了全索引扫描来计算。这个过程这张表是锁定的。

InnoDB并不是在硬盘上存储统计信息。但是使用随机索引进入首次打开的表的方法来估算它们。对于InnoDB,ANALYZE TABLE使用的是随机的方式。因此统计结果不精确的,它们不需要手动更新,除非你服务器运行了很长时间。ANALYZE TABLE也不回加锁消耗也相对低些。因此你可以在线的更新统计信息而不会影响正常工作。

你可以使用SHOW INDEX FROM来查看索引信息。

mysql> SHOW INDEX FROM sakila.actorG
*************************** 1. row ***************************
Table: actor
Non_unique: 0
Key_name: PRIMARY
Seq_in_index: 1
Column_name: actor_id
Collation: A
Cardinality: 200
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE
Comment:
*************************** 2. row ***************************
Table: actor
Non_unique: 1
Key_name: idx_actor_last_name
Seq_in_index: 1
Column_name: last_name
Collation: A
Cardinality: 200
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE

给出了很多索引信息。MySQL文档有详细说明。我们要注意的是Cardinality。这显示了在索引中存储引擎估算了多少个唯一的值。MySQL5.0中你也可以在INFORMATION_SCHEMA.STATISTICS表中获得这些信息,这样更方便了。举个例子,如果你可以写一条查询INFORMATION_SCHEMA的语句,来发现选择性更低的索引。

Tags:Schema 优化 索引

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接