MylSQL索引

来源:互联网 发布:access 多少条数据 编辑:程序博客网 时间:2024/06/05 02:52

1.索引

(1)、使用索引可快速访问数据库表中的特定信息,索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容;索引可以加快数据检索操作,但会使数据修改操作变慢。每修改数据记录,索引就必须刷新一次。

(2)、从理论上讲,完全可以为数据表里的每个字段分别建一个索引,但MySQL把同一个数据表里的索引总数限制为16个。

(3)、索引使用限制

如果WEHERE语句的查询条件里有不等号(WHERE coloum != …),MySQL将无法使用索引

类似地,如果WHERE子句的查询条件里使用了函数(WHERE DAY(column) = …),MySQL也将无法使用索引

在JOIN操作中(需要从多个数据表提取数据时),MySQL只有在主键和外键的数据类型相同时才能使用索引

如果WHERE子句的查询条件里使用比较操作符LIKEMySQL只有在搜索模板的第一个字符不是通配符的情况下才能使用索引。比如说,如果查询条件是LIKE ‘abc%’,MySQL将使用索引;如果查询条件是LIKE ‘%abc’,MySQL将不使用索引

(4)、索引的创建准则:

经常需要搜索的列上

在经常需要排序的列上

当修改远远超过查询时,不应该创建索引

(5)、索引的创建

a、普通索引:

普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。因此,应该只为那些最经常出现在查询条件(WHERE column =…)或排序条件(ORDER BY column)中的数据列创建索引。只要有可能,就应该选择一个数据最整齐、最紧凑的数据列(如一个整数类型的数据列)来创建索引。

<span style="white-space:pre"></span>CREATE INDEX 索引名 ON 表明(字段名)

b、唯一索引

普通索引允许被索引的数据列包含重复的值,如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。这么做的好处:一是简化了MySQL对这个索引的管理工作,这个索引也因此而变得更有效率,二是MySQL会在有新记录插入数据表时,自动检查新记录的这个字段的值是否已经在某个记录的这个字段里出现过了;如果是,MySQL将拒绝插入那条新记录。也就是说,唯一索引可以保证数据记录的唯一性。

<span style="white-space:pre"></span>CREATE UNIQUE INDEX 索引名 ON 表名(值唯一的列名)


c、主索引

在前面已经反复多次强调过:必须为主键字段创建一个索引,这个索引就是所谓的”主索引”。主索引与唯一索引的唯一区别是:前者在定义时使用的关键字是PRIMARY而不是UNIQUE,当我们定义了一个主键约束,数据库会间接的为我们创建一个主键索引,同时我们也通过下面的语句创建主索引。

<span style="white-space:pre"></span>CREATE PRIMARY INDEX 索引名 ON 表明(主键列明)
d、外键索引

如果为某个外键字段定义了一个外键约束条件,MySQL就会定义一个内部索引来帮助自己以最有效率的方式去管理和使用外键约束条件。当我们定义了一个外键约束,间接的为我们创建了一个外键索引。



e、复合索引

索引可以覆盖多个数据列,如像INDEX(columnA, columnB)索引。这种索引的特点是MySQL可以有选择地使用一个这样的索引。如果查询操作只需要用到columnA数据列上的一个索引,就可以使用复合索引INDEX(columnA, columnB)。不过,这种用法仅适用于在复合索引中排列在前的数据列组合。比如说,INDEX(A, B, C)可以当做A或(A, B)的索引来使用,但不能当做B、C或(B, C)的索引来使用。

<span style="white-space:pre"></span>CREATE INDEX 索引名 ON 表明(A列,B列)





0 0
原创粉丝点击