欢迎来到天天文库
浏览记录
ID:44416645
大小:103.59 KB
页数:11页
时间:2019-10-21
《mysql索引设计策略》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、mysql索引设计策略MySQL5.0中索引的设计和使用下面讨论下MySQL5.0屮的索引的设计和使用。任何东西设计的好,那么使用起來就顺手。不过很多时候给出设计什么规则这些都是和対的。做任何的事情,最重耍的是能否根据当时情况就合理的调整你的设计。如果你只会看着书本或者权威來死套什么设计理念來进行实际的开发和设计的话,那么我请你还是少读书为妙。索引是数据库屮用來提高性能的常用工具。(注意如果要优化数据库的性能,这是--个点)。所有MySQL列类型都对以被索引,对相关列使用索引是提高SELECT操作性能的最佳途
2、径。根据存储引擎可以定义每个表的最大索引数和最大索引长度,每种存储引擎(MylSAM、InnoDB.BDB、MEMORY等)对每个表至少支持16个索引,总索引长度至少为256字节。大多数存储引擎有更高的限制。MvISAM和InnoDB存储引擎的表默认创建的都是BTREE索引。MySQL目前还不支持函数索引,但是支持前缀索引,即对索引字段的前N个字符创建索引。前缀索引的长度跟存储引擎相关,对于MylSAM存储引擎的表,索引的前缀长度可以达到1000字节长,而对于InnODB存储引擎的表,索引的前缀长度最长是76
3、7字节。请注意前缀的限制应以字节为单位进行测量,而CREATETABLE语句中的前缀长度解释为字符数。在为使用多字节字符集的列指定前缀长度时一定要加以考虑。MySQL中还支持全文本索引(FULLTEXT),该索引可以用于全文搜索。但是在Mysql5.0中只冇MylSAM存储引擎支持全文本索引,并且仅仅局限于CHAR、VARCHAR和TEXT列。索引总是对整个列进行的,不支持局部索引。也可以为空间类型创建索引,但是只要MylSAM存储引擎支持空间类型索引,而II索引的字段必须是非空。创建索引的语法如下:引川CR
4、EATE[UNIQUE
5、FULLTEXT
6、SPATTAL]TDEXindex_name[USINGindex_type]ONtbl_name(index_col_name,....)DESC]index_col_name:col_name[(length)][ASC索引的创建可以在创建表的时候就创建,也可以随时增加新的索引。下面给出一个例子:引川createindexpersonnameonperson(person(10))查询,"J以发现索引personname被使用引用explainselect*fro
7、mpersonwhereperson」hi'G索引的删除语法为:引用DROPINDEXindex_nameONtbl_name如果想删除person表中的personname索引如卜操作引川dropindexpersonnameonperson上而简单的演示了索引的创建和删除。接下来讨论下索引的设计原则:索引的设计可以遵循一些已有的原则,创建索引的时候请尽量考虑符合这些原则,便于提升索引的使用效率,更高效地使丿TJ索引。1.搜索的索引列,不一定是所要选择的列。最合适索引的列是出现在WHERET句中的列,或连
8、接子句中指定的列,而不是出现在SELECT关键字后的选择列表中的列。2.使用唯一索引。考虑某列屮值的分布。索引的列的基数越大,索引的效果越好。例如数据库屮有好儿年的资料,这些资料中有日期这个字段,而且查询中常常要区分日期。那么针对日期设索引就很容易区分。3.使用短索引。如果对字符串列进行索引,应该指定前缀长度,只要有可能就应该这样做。例如:如果有-•个CHAR(200)的列,如果在前10个或20个字符内,多数值是唯一的。那么就不要对整个列进行索引。对前10个或者20个字符进行索引能够节省大量索引空间,也可能会
9、使查询更快。较小的索引涉及的磁盘TO较少,校短的值比较起来更快。更为重要的是,对于较短的键值,索引高速缓存中的块能容纳更多的键值,凶此,MySQL也可以在内存中容纳更多的值。这样就增加了找到行而不用读取索引中较多块的可能性。1.利用最左前缀。在创建一个n列的索引时,实际是创建了MySQL可利用的n个索引。多列索引起儿个索引的作用,因为可利用索引屮最左的列集来匹配行。这样的列集称最左前缀。2.不要过度索引。不要以为索引“越多越好”,什么东西都用索引是错误的。每个额外的索引都要占用额外的磁盘空间,并降低写操作的性
10、能。在修改表的内容吋,索引必须进行更新,有时可能需要重构,因此,索引越多,所花的时间越长。如果有一个索引很少利用或者从不使用,那么会不必要地减缓表的修改速度。此为MySQL在生成一个执行计划时,要考虑各个索引,这也要花费吋间。创建多余的索引给杳询优化带來了更多的工作。索引太多,也可能会使MySQL选择不到所要使用的最好索引。值保持所需的索引有利于查询优化。3.对于InnoDB存储引擎的表,记录默认会
此文档下载收益归作者所有