Mysql中使用索引提高查询速度

2014-04-29 00:44魏再超
中国电子商情 2014年12期
关键词:主键磁盘字段

魏再超

引言:在web开发中,页面模板,业务逻辑(包括缓存、连接池)和数据库这三个部分,数据库在其中负责执行SQL查询并返回查询结果,是影响网站速度最重要的性能瓶颈。本文主要针对MySql数据库,通过使用索引来提升查询速度。

索引用于快速找出在某个列中有一特定值的行。不使用索引,MySQL将进行全表扫描,从第一条记录开始然后读完整个表直到找出相关的行。

一、mysql索引类型

常用的索引类型有

(1)主键索引

它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引。

(2)普通索引

这是最基本的索引,它没有任何限制。

(3)唯一索引

它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。

(4)全文索引

MySQL支持全文索引和搜索功能。MySQL中的全文索引类型为FULLTEXT的索引。FULLTEXT 索引仅可用于 MyISAM表;

二、在什么情况下使用索引

为搜索字段建索引,如果在你的表中,某个字段你经常用来做搜索,那么,请为其建立索引吧。一般来说,在WHERE和JOIN中出现的列需要建立索引以提高查询速度。

三、最常用的存储引擎:

(1)Myisam存储引擎:每个Myisam在磁盘上存储成三个文件。文件名都和表名相同,扩展名分别为.frm(存储表定義)、.MYD(存储数据)、.MYI(存储索引)。数据文 件和索引文件可以放置在不同目录,平均分布io,获得更快的速度。对存储大小没有限制,MySQL数据库的最大有效表尺寸通常是由操作系统对文件大小的限制决定的。

(2)InnoDB存储引擎:具有提交、回滚、奔溃恢复能力的事务安全。与Myisam相比,InnoDB的写效率差一些并且会占用更多的磁盘空间以保留数据和索引。

(3)如何选择合适的引擎

下面是常用存储引擎适用的环境:

Myisam:它是在Web、数据仓储和其他应用环境下最常使用的存储引擎;

InnoDB:用于事务处理应用程序,具有更多特性,包括ACID事务特性。

四、设计MySql索引的时候有以下几点注意:

(1)、对于查询占主要的应用来说,索引显得尤为重要。很多时候性能问题很简单的就是因为我们忘了添加索引而造成的,或者说没有添加更为有效的索引导致。如果不加索引的话,那么查找任何哪怕只是一条特定的数据都会进行一次全表扫描,如果一张表的数据量很大而符合条件的结果又很少,那么不加索引会引起致命的性能下降。但是也不是什么情况都非得建索引不可,如:表记录太少,经常插入、删除、修改的表,某个字段只会出现重复的几个值,建索引不仅没什么优势,还会影响到更新速度,这被称为过度索引。其次,在对建立索引的时候要对表进行加锁,因此应当注意操作在业务空闲的时候进行。

(2)、还应当考虑表空间和磁盘空间是否足够。我们知道索引也是一种数据,在建立索引的时候势必也会占用大量表空间。因此在对一大表建立索引的时候首先应当考虑的是空间容量问题。

(3)、性能调整方面:首当其冲的考虑因素便是磁盘I/O。物理上,应当尽量把索引与数据分散到不同的磁盘上(不考虑阵列的情况)。逻辑上,数据表空间与索引表空间分开。这是在建索引时应当遵守的基本准则。

参考文献

[1] http://blog.sina.com.cn/s/blog_40e5b6370100f0vy.html.

[2]高性能MySQL(第3版).电子工业出版社.Baron Schwartz等著;宁海元等译.

[3]MySQL技术内幕:InnoDB存储引擎(第2版).机械工业出版社. 姜承尧 著.

(作者单位:保山学院信息学院)

猜你喜欢
主键磁盘字段
基于Go 实现的分布式主键系统研究
图书馆中文图书编目外包数据质量控制分析
基于外键的E-R图绘制方法研究
解决Windows磁盘签名冲突
修改磁盘属性
磁盘组群组及iSCSI Target设置
创建VSAN群集
CNMARC304字段和314字段责任附注方式解析
无正题名文献著录方法评述
关于CNMARC的3--字段改革的必要性与可行性研究