程序员人生 网站导航

(7)mysql索引的设计和使用

栏目:数据库应用时间:2015-04-18 12:07:50

概述

??索援用于快速找出在某个列中有1特定值的行。不使用索引,MySQL必须从第1条记录开始然后读完全个表直到找出相干的行。表越大,花费的时间越多。如果表中查询的列有1个索引,MySQL能快速到达1个位置去搜索到数据文件的中间,没有必要看所有数据。
??在MySQL中所有的类型数据列都可以被索引,对相干列使用索引是提高select操作性能的最好途径。MyISAM和InnoDB存储引擎的表默许创建索引都是BTREE索引。MyISAM还支持全文本索引,该索引可以用于创建全文搜索。默许情况下, MEMORY存储引擎使用HASH索引,但也支持BTREE索引。

设计索引原则

  1. 最适合索引的列是出现在where子句中的列,或连接子句中的列。
  2. 使用唯1索引,索引的列的基数越大,索引效果越好,如寄存生日的列具有不同的值,很容易辨别各个行,而记录性别的列,只含有“m”和“f”,则对此列进行索引没有多大用途,由于不管搜索哪一个值,都会大约得出1半的行。
  3. 使用前缀索引,如果对1个字符串列进行索引,应当指定1个前缀长度。
  4. 如果索引了多列(复合索引),要遵照最左前缀法则。所谓最左前列,指的是查询从索引的最左前列开始,并且不跳过索引中的列。
  5. 不要过量的使用索引。每次的更新,删除,插入都会保护该表的索引;更多的索引意味着也需要更多的空间 ;太小的表,建索引可能会更慢哦 :) (读个2页的宣扬手册,你还先去找目录?)。
  6. 对InnoDB存储引擎的表,记录默许会依照1定的顺序保存,如果有明肯定义的主键,则依照主键顺序保存,InnoDB表的普通索引都会保存主键的键值,所有主键尽量的选择较短的数据类型。
  7. 索引列不应当作为表达式的1部份,即也不能在索引列上使用函数。

说明:

创建表(friends)
这里写图片描述
创建(uid和fuid的复合索引)。

  • 对第4条说明:
    最左前缀法则
    第2条语句,从索引的第2列开始查找,使用索引失败,致使MySQL采取ALL访问策略,即全表查询.在开发中,应当尽可能避免全表查询。
  • 对第7条说明:
    索引不能使用表达式或函数
    第2和3条语句都有使用表达式,索引派不上用处。

参考

参考1:http://thephper.com/?p=142
参考2:http://my.oschina.net/longniao/blog/110384

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐