(7)mysql索引的设计和使用
2015-04-10 13:19
302 查看
概述
索引用于快速找出在某个列中有一特定值的行。不使用索引,MySQL必须从第1条记录开始然后读完整个表直到找出相关的行。表越大,花费的时间越多。如果表中查询的列有一个索引,MySQL能快速到达一个位置去搜寻到数据文件的中间,没有必要看所有数据。在MySQL中所有的类型数据列都可以被索引,对相关列使用索引是提高select操作性能的最佳途径。MyISAM和InnoDB存储引擎的表默认创建索引都是BTREE索引。MyISAM还支持全文本索引,该索引可以用于创建全文搜索。默认情况下, MEMORY存储引擎使用HASH索引,但也支持BTREE索引。
设计索引原则
最合适索引的列是出现在where子句中的列,或者连接子句中的列。使用唯一索引,索引的列的基数越大,索引效果越好,如存放生日的列具有不同的值,很容易区分各个行,而记录性别的列,只含有“m”和“f”,则对此列进行索引没有多大用处,因为不管搜索哪个值,都会大约得出一半的行。
使用前缀索引,如果对一个字符串列进行索引,应该指定一个前缀长度。
如果索引了多列(复合索引),要遵守最左前缀法则。所谓最左前列,指的是查询从索引的最左前列开始,并且不跳过索引中的列。
不要过多的使用索引。每一次的更新,删除,插入都会维护该表的索引;更多的索引意味着也需要更多的空间 ;过小的表,建索引可能会更慢哦 :) (读个2页的宣传手册,你还先去找目录?)。
对InnoDB存储引擎的表,记录默认会按照一定的顺序保存,如果有明确定义的主键,则按照主键顺序保存,InnoDB表的普通索引都会保存主键的键值,所有主键尽可能的选择较短的数据类型。
索引列不应该作为表达式的一部分,即也不能在索引列上使用函数。
说明:
创建表(friends)创建(uid和fuid的复合索引)。
对第4条说明:
第2条语句,从索引的第二列开始查找,使用索引失败,导致MySQL采用ALL访问策略,即全表查询.在开发中,应该尽量避免全表查询。
对第7条说明:
第2和3条语句都有使用表达式,索引派不上用场。
参考
参考1:http://thephper.com/?p=142参考2:/article/3526607.html
相关文章推荐
- mysql 索引概念及其分类、使用及设计方法
- MySQL优化系列(三)--索引的使用、原理和设计优化
- MySQL——索引的设计和使用
- mysql的优化(表的设计,优化步骤,四种索引,分析慢查询,使用索引的深入解析,存储引擎分析,表的分割,数据库配置)
- mysql索引设计和使用
- 深入浅出mysql_索引的设计和使用
- mysql 开发基础系列15 索引的设计和使用
- mysql----索引的设计和使用
- Mysql索引的设计、使用和优化
- mysql 索引的设计和使用
- MySQL索引的使用
- mysql 查看索引使用情况
- MySQL优化之索引的使用
- SQL Server 查询优化(3)_索引的设计与使用
- mysql索引的使用及语句优化
- where条件对mysql多列索引的使用
- MySQL查询优化技术系列讲座之使用索引(一)
- mysql 索引的使用和查询语法
- MySQL优化之索引的使用