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

概述

??索引用于快速找出在某个列中有一特定值的行。不使用索引,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的复合索引)。

  • 对第4条说明:

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

  • 对第7条说明:

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

参考

参考1:http://thephper.com/?p=142

参考2:http://my.oschina.net/longniao/blog/110384

时间: 2024-11-09 02:01:34

(7)mysql索引的设计和使用的相关文章

MySQL索引的设计、使用和优化

原文:http://bbs.landingbj.com/t-0-243071-1.html MySQL索引概述 所有MySQL列类型可以被索引.对相关列使用索引是提高SELECT操作性能的最佳途径.根据存储引擎定义每个表的最大索引数和最大索引长度.所有存储引擎支持每个表至少16个索引,总索引长度至少为256字节.大多数存储引擎有更高的限制. 在MySQL 5.1中,对于MyISAM和InnoDB表,前缀可以达到1000字节长.请注意前缀的限制应以字节为单位进行测量,而CREATE TABLE语句

MySQL索引的设计和使用

一. 索引概述 MyISAM和InnoDB存储引擎的表默认创建的都是BTREE索引.MySQL目前还不支持函数索引(5.7版本开始支持),但支持前缀索引,即对索引字段的前N个字符创建索引.前缀索引的长度和存储引擎相关,对于MyISAM存储引擎的表,索引的前缀长度可以达到1000字节长,而对于InnoDB存储引擎的表,索引的前缀长度最长是767字节.请注意前缀的限制应以字节为单位进行测量,而create table语句中的前缀长度解释为字符数.在为使用多字节字符集的列指定前缀长度时一定要加以考虑.

深入浅出分析MySQL索引设计背后的数据结构

在我们公司的DB规范中,明确规定: 1.建表语句必须明确指定主键 2.无特殊情况,主键必须单调递增 对于这项规定,很多研发小伙伴不理解.本文就来深入简出地分析MySQL索引设计背后的数据结构和算法,从而可以帮你释疑如下问题: 1.为什么innodb表需要主键? 2.为什么建议innodb表主键是单调递增? 3.为什么不建议innodb表主键设置过长? B-tree(多路搜索树,并不是二叉的)是一种常见的数据结构.使用B-tree结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度.B通常

MySQL 索引设计概要

在关系型数据库中设计索引其实并不是复杂的事情,很多开发者都觉得设计索引能够提升数据库的性能,相关的知识一定非常复杂. 然而这种想法是不正确的,索引其实并不是一个多么高深莫测的东西,只要我们掌握一定的方法,理解索引的实现就能在不需要 DBA 的情况下设计出高效的索引. 本文会介绍 数据库索引设计与优化 中设计索引的一些方法,让各位读者能够快速的在现有的工程中设计出合适的索引. 磁盘 IO 一个数据库必须保证其中存储的所有数据都是可以随时读写的,同时因为 MySQL 中所有的数据其实都是以文件的形式

Mysql 学习-索引的设计原则

索引的设计不合理或者缺少索引都会对数据库和应用程序的性能造成障碍.高效的索引对获的良好性能非常重要.设计索引是,应该考虑一下准则: (1)索引并非语讹夺越好,若一个表中有大量索引,不仅占用磁盘空间,而且会影响Insert/delete/update等语句的性能,因为当表中的数据更改同时,索引也会进行调整和更新. (2)避免对经常更新的表最好不要使用索引,并且索引中的列尽可能少,而对经常用于查询的字段应该创建索引,但要避免添加不必要的字段. (3)数据量小的表最好不要使用索引,由于数据比较少,查询

MySQL索引基本应用[转]

原文地址:http://www.php100.com/html/webkaifa/database/Mysql/2010/0409/4279.html 索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型. 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytable表: CREATE TABLE mytable(   ID INT NOT NULL,    username VARCHAR(16) NOT N

mysql索引总结----mysql 索引类型以及创建

关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车.对于没有索引的表,单表查询可能几十万数据就是瓶颈,而通常大型网站单日就可能会产生几十万甚至几百万的数据,没有索引查询会变的非常缓慢.还是以WordPress来说,其多个数据表都会对经常被查询的字段添加索引,比如wp_comments表中针对5个字段设计了BTREE索引. 一个简单的对比测试 以我去年测试的数据作为一个简单示例,20多条数据源随机生成200万条

mysql 索引和查询优化

对于任何DBMS,索引都是进行优化的最主要的因素.对于少量的数据,没有合适的索引影响不是很大,但是,当随着数据量的增加,性能会急剧下降.如果对多列进行索引(组合索引),列的顺序非常重要,MySQL仅能对索引最左边的前缀进行有效的查找. 例如:假 设存在组合索引it1c1c2(c1,c2),查询语句select * from t1 where c1=1 and c2=2能够使用该索引.查询语句select * from t1 where c1=1也能够使用该索引.但是,查询语句select * f

MySQL索引使用方法和性能优化

关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车.对于没有索引的表,单表查询可能几十万数据就是瓶颈,而通常大型网站单日就可能会产生几十万甚至几百万的数据,没有索引查询会变的非常缓慢.还是以WordPress来说,其多个数据表都会对经常被查询的字段添加索引,比如wp_comments表中针对5个字段设计了BTREE索引. 一个简单的对比测试 以我去年测试的数据作为一个简单示例,20多条数据源随机生成200万条