`

mysql学习

阅读更多

InnoDB表建立索引注意:

InnoDB表是基于聚簇索引建立的,InnoDB的索引结构,非常不同于其他大多数MySQL存储引擎,因此,它只提供一种非常快速的主键查找性能。不过,它的辅助索引(Sencondary Index,也就是非主键索引)也会包含主键列,所以,如果主键定义的比较大,其他索引也将很大。如果想在表上定义很多索引,则争取尽量把主键定义得小一些。InnoDB不会压缩索引。

 

InnoDB还不能根据排序(sorting)建立索引,而MyISAM支持。因此,当InnoDB加载数据和创建索引时,要比MyISAM慢很多。任何改变InnoDB表结构的操作,会导致这个表的重建,包括重建所有索引。

 

查看表的属性:

 

show table status like '表名';

 

修改表的引擎语句:

 

alter table ‘表名’ engine='引擎名';

 

这种语法适合所有的存储引擎,不过这里有一个“陷阱”,这种转换过程会消耗大量时间。MySQL为此要执行一个旧表到新表的逐行复制(Row-By-Row Copy)。在这期间,转换操作可能会占用服务器的所有I/O处理能力,并且在转换时,源表要被读加锁(Read-Locked)。因此,在一个繁忙的表上做此操作,要加以注意。

 

建立数据库表要考虑的因素:

 

虽然有许多因素会影响存储引擎的选择,但通常可以归结为几个主要考虑因素。下面有一些要点是应该引起注意的。

 

1、事务

 

如果应用需要事务处理操作,那么InnoDB是稳定的、良好的、已被证明的一种恰当选择。

如果不需要事务处理,并且主要操作时处理一些select或insert查询,那么MyISAM是一个很好的选择。另外,有时应用的某个专用部分(例如日志记录)也适合选用MyISAM引擎。

 

2、并发

 

如何更好地满足并发需求,要依据应用的工作负载而定。如果只是需要并发的插入操作和读操作,MyISAM都是正确的选择。如果需要混合性的并发操作,并且操作之间要互不干扰,那么支持行级锁的引擎是更好的选择(例如InnoDB)。

 

3、备份

 

常规备份需求也会影响表的选择。如果服务器可以周期性地停机,来进行备份,那么各种引擎都能很容易地实现备份功能。但如果需要这样或那样的某种联机备份,那么选择可能就不简单了。另外,要记住,如果同时使用多种引擎,会使备份和服务器(性能)调整变得更加复杂。

 

4、崩溃后恢复

 

如果有大量的数据、应该慎重考虑,系统崩溃后需要花多长时间才能恢复。比如通常来说,MyISAM表比InnoDB表更容易出错,恢复所需的时间也更长。事实上,很多人并不需要事务处理,也选择了InnoDB引擎,就是基于这个重要的原因。

 

5、特有特性

 

操作人员可能会发现应用程序依赖于只有某些存储引擎才能提供的特殊性或优化手段。例如,很多应用都依赖于聚集索引优化。在这种情况下,只有InnoDB和solidDB可以选择。另一方面,在MySQL中,也只有MyISAM支持全文检索。如果某个存储引擎可以满足应用的一个或若干重要需求,但又不支持别的需求时,就要做折中考虑了,或者要寻找一种更灵巧的设计方案。通常的情况时,某种存储引擎可以满足所有的需要,虽然从表面上看,似乎不支持全部需求。

 

----------------------------------------------------------------------------------------------------------------------------------


存储引擎 事务 锁粒度 主要应用 忌用

----------------------------------------------------------------------------------------------------------------------------------

MyISAM 不支持 支持并发 select、insert 读写并存的场合

插入的表锁 高负载

----------------------------------------------------------------------------------------------------------------------------------

InnoDB 支持 支持MVCC 事务处理

的行级锁

----------------------------------------------------------------------------------------------------------------------------------

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics