索引的概念
最近在看mysql索引,首先是关于索引的简介。说实话我对于这个并不是很理解,只明白大概的作用就是让数据库的检索变的更快。
所以主要作用是从网上查阅的:
索引是指把你设置为索引的字段A的内容储存du在一个独立区间S里,里面只有这个字段的内容。
在找查这个与这个字段A的内容时会直接从这个独立区间里查找,而不是去到数据表里查找。
找到的这些符合条件的字段后再读取字段A所指向真实的数据记录的物理地址,再把对应的数据内容输出。
如果你查找的不是索引的字段那么他会从数据表里面查找。因为数据表有很多不相关的字段,数据库程序是不会省略不查找。要判断那些不相关的字段以及多次在记录中跳转是花费一定的资源的。
当然不是设置越多索引就越好。因为索引都放到这个独立区间S,独立区间S越大搜索所占的资源就越大。如果你只有一个字段为索引,那么你搜索这个字段是非常快速的。
- 可以把索引比作新华字典的音序表。例如,要查“库”字,如果不使用音序,就需要从字典的 400 页中逐页来找。但是,如果提取拼音出来,构成音序表,就只需要从 10 多页的音序表中直接查找。这样就可以大大节省时间。
索引的优缺点
优点
- 通过创建唯一索引可以保证数据库表中每一行数据的唯一性。
- 可以给所有的 MySQL 列类型设置索引。
- 可以大大加快数据的查询速度,这是使用索引最主要的原因。
- 在实现数据的参考完整性方面可以加速表与表之间的连接。
- 在使用分组和排序子句进行数据查询时也可以显著减少查询中分组和排序的时间
缺点
- 创建和维护索引组要耗费时间,并且随着数据量的增加所耗费的时间也会增加。
- 索引需要占磁盘空间,除了数据表占数据空间以外,每一个索引还要占一定的物理空间。如果有大量的索引,索引文件可能比数据文件更快达到最大文件尺寸。
- 当对表中的数据进行增加、删除和修改的时候,索引也要动态维护,这样就降低了数据的维护速度。
以上来源于http://c.biancheng.net/view/7890.html
索引的创建
- 创建索引
CREATE INDEX [indexName] ON [table_name] ([column_name])
如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length。 - 修改表结构(添加索引)
ALTER table [tableName] ADD INDEX [indexName]([columnName])
- 创建表的时候直接指定
CREATE TABLE [mytable](
ID INT NOT NULL,
username VARCHAR(16) NOT NULL,
INDEX [indexName] (username(length))
);
- 删除索引
DROP INDEX [indexName] ON mytable;
- 创建索引
CREATE UNIQUE INDEX indexName ON mytable(username(length))
- 修改表结构
ALTER table mytable ADD UNIQUE [indexName] (username(length))
- 创建表的时候直接指定
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, UNIQUE [indexName] (username(length)) );
- 使用ALTER 命令添加和删除索引
有四种方式来添加数据表的索引:
ALTER TABLE tbl_name ADD PRIMARY KEY (column_list);
该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。
ALTER TABLE tbl_name ADD UNIQUE index_name (column_list);
这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)。
ALTER TABLE tbl_name ADD INDEX index_name (column_list);
添加普通索引,索引值可出现多次。
ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list);
该语句指定了索引为 FULLTEXT ,用于全文索引。