美文网首页mysqlphper的再回炉
(007)mysql索引的设计和使用

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

作者: 林湾村龙猫 | 来源:发表于2016-01-21 00:32 被阅读175次

概述

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

设计索引原则

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

说明:

创建表(friends)与创建(uid和fuid的复合索引)。


friends表结构
  • 对第4条说明:


    最左前缀法则

    第2条语句,从索引的第二列开始查找,使用索引失败,导致MySQL采用ALL访问策略,即全表查询.在开发中,应该尽量避免全表查询。

  • 对第7条说明:


    索引不能使用表达式或函数

    第2和3条语句都有使用表达式,索引派不上用场。

参考

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

相关文章

  • (007)mysql索引的设计和使用

    概述 索引用于快速找出在某个列中有一特定值的行。不使用索引,MySQL必须从第1条记录开始然后读完整个表直到找出相...

  • mysql索引及类型

    一、什么是mysql索引? 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索...

  • MySQL 索引

    MySQL索引的好处不言而喻,如果对MySQL正确合理设计并且使用索引就好像是一辆法拉利,然而没有设计和使用索引的...

  • 走向DBA之索引

    前言:如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车...

  • 【Mysql优化分析】之InnoDB索引类型及原理、字段范式/逆

    Mysql优化的部分有很多,本文主要介绍Mysql执行过程、索引类型及原理、字段范式/逆范式设计、索引设计及使用。...

  • MySQL 索引的设计和使用

    所有 MySQL 列类型都可以被索引,对相关列使用索引是提高 select 操作性能的最佳途径 索引在创建表的时候...

  • mysql查询时强制或者禁止使用某个索引

    mysql强制索引和禁止某个索引 1、mysql强制使用索引:force index(索引名或者主键PRI)例如:...

  • Mysql索引的设计、使用和优化

    Mysql索引概述 所有MySQL列类型可以被索引。对相关列使用索引是提高SELECT操作性能的最佳途径。根据存储...

  • 数据库

    • MySQL 索引使用的注意事项 MySQL 索引使用的注意事项 索引不会包含有NULL值的列使用短索引...

  • MySQL实战 | 05 如何设计高性能的索引?

    原文链接:MySQL | 05 如何设计高性能的索引? 上回我们主要研究了为什么使用索引,以及索引的数据结构。今天...

网友评论

    本文标题:(007)mysql索引的设计和使用

    本文链接:https://www.haomeiwen.com/subject/yvylkttx.html