WEB开发网
开发学院数据库MySQL MySQL查询优化系列讲座之数据类型与效率 阅读

MySQL查询优化系列讲座之数据类型与效率

 2006-04-06 10:43:37 来源:WEB开发网   
核心提示: ALTER TABLE tbl_name DISABLE KEYS;ALTER TABLE tbl_name ENABLE KEYS;这些语句关闭或打开表中非唯一(non-unique)索引的更新过程,ALTER TABLE的DISABLE KEYS和ENABLE KEYS子句是索引禁止和

ALTER TABLE tbl_name DISABLE KEYS;
ALTER TABLE tbl_name ENABLE KEYS;

这些语句关闭或打开表中非唯一(non-unique)索引的更新过程。

ALTER TABLE的DISABLE KEYS和ENABLE KEYS子句是索引禁止和激活操作的推荐方法,因为服务器也是这样操作的(如果你使用LOAD DATA语句把数据载入空的MyISAM表中,服务器会自动地执行这样的优化操作)。

· Myisamchk工具可以执行索引维护。它直接在数据表文件上进行操作,因此使用它的时候,你必须拥有数据表文件的写入权限。

使用myisamchk禁止MyISAM表的索引的方法是,首先你要确保已经告诉了服务器让该数据表独立出来,接着把它移动到适当的数据库目录中,并运行下面的命令:

% myisamchk --keys-used=0 tbl_name

载入数据之后,重新激活索引:

% myisamchk --recover --quick --keys-used=n tbl_name

其中的n是位掩码(bitmask),它指明了要激活的索引。Bit 0(第一个位)与索引1对应。例如,如果某张表拥有三个索引,那么n的值应该是7(二进制的111)。你也可以使用--description选项来检测索引的数量:

% myisamchk --description tbl_name

前面的数据载入原则也可以应用于混合查询环境(客户端执行多种不同的操作)。例如,你应该避免在那些频繁被修改(写入)的数据表上运行长时间的SELECT查询。这会引发大量的争用(contention),导致写入操作的性能较差。一个可能的解决办法是,如果你的写入操作主要是INSERT操作,那么把新记录添加到辅助表中,接着周期性地把这些记录添加到主表中。如果你必须立即访问这些新记录,那么这个策略是不行的,但是如果你能够承担得起短期内不访问这些数据的代价,那么使用辅助表可以在两个方面带来好处。首先,它减少了主表上的SELECT查询争用的问题,因此它们执行得更快。其次,把辅助表中的批量数据载入主表中所花费的时间总和也比单独载入记录花费的时间总和要小一些;键缓存只需要在每次批量载入结束后刷新一次,而不用每个数据行载入后都刷新一次。

使用这种策略的一个应用是把Web服务器的Web页面访问日志载入MySQL数据库的时候。在这种情况下,保证实体立即进入主表的优先级并不高(没有这个必要性)。

如果你在MyISAM表上使用了混合的INSERT和SELECT语句,你就可以利用并发性插入操作的优点了。这个特性允许插入和检索操作同时进行,而不需要使用辅助表。你可以查看"使用并发性插入操作"部分。

上一页  4 5 6 7 8 9 

Tags:MySQL 查询 优化

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