如果你也曾了解过数据库的知识,应该会对数据库索引有所理解吧,所以你还记得数据库索引是怎么建立的吗?数据库索引一般有什么作用呢?
索引是快速搜索数据的关键。例如,数据MySQL索引的建立对于MySQL的高效运行也是很重要的。下面就来介绍几种常见的MySQL索引的类型。
我们在数据库表中,一旦对字段建立了索引就可以大大提高查询的速度了。就比如说我们创建了一个mytable表:
CREATE TABLE mytable( IDINTNOT NULL, username VARCHAR(16) NOT NULL);
我们现在就随机地向里面插入10000条记录,其中有一条就是:1111, admin。
我们可以在查找username="admin"的记录的:
SELECT * FROMmytable WHERE
username='admin';
的时侯,如果在username上已经建立起了索引,MySQL其实就无须再有任何的扫描了,即准确地可找到该记录了。如果相反,MySQL则会扫描所有记录,即要查询10000条记录。
索引分为单列索引和组合索引。单列索引,即一个索引只是包含单个列,一个表是可以有多个单列索引的,但注意这不是组合索引。组合索引,就是一个索引然后包含了多个列。
我们再来看看MySQL索引类型包括哪些?
首先是普通索引:这是最基本的索引,因为它没有任何的限制。它有以下几种创建方式:
创建索引:
CREATE INDEXindexName ON mytable(username(length));
如果是CHAR,VARCHAR的类型,length就可以小于字段实际长度了;如果是BLOB和TEXT类型,就必须指定length,下面也是一样的。
修改表结构:
ALTERmytable ADDINDEX[indexName] ON (username(length))
创建表的时候我们可以直接这样指定:
CREATE TABLE mytable( IDINTNOT NULL, username VARCHAR(16) NOT NULL,
INDEX [indexName] (username(length)) );
删除索引的语法如下:
DROP INDEX [indexName] ON mytable;
唯一索引:它与之前的普通索引类似,不同之处就是:索引列的值必须是唯一的,也允许有空值。如果是组合索引的话,就列值的组合必须是唯一的。它有以下几种创建方式:
可以这样创建索引:
CREATE UNIQUE INDEX indexName ON mytable(username(length))
可以这样修改表结构:
ALTERmytable ADDUNIQUE [indexName] ON (username(length))
在创建表的时候外我们可以直接这样指定:
CREATE TABLE mytable( IDINTNOT NULL, username VARCHAR(16) NOT NULL,
UNIQUE [indexName] (username(length)) );
所谓主键索引其实它就是一种特殊的唯一索引,也是不允许有空值存在的。一般是在建表的时候同时创建主键索引:
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL,
PRIMARY KEY(ID) );
当然也可以用 ALTER命令。但是要记住:一个表是只能有一个主键的。
组合索引:为了鲜明地对比单列索引和组合索引,我们可以为表添加多个字段:
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL,
city VARCHAR(50) NOT NULL, age INT NOT NULL );
为了进一步榨取MySQL的效率,就要考虑建立组合索引。就是将 name, city, age建到一个索引里:
ALTER TABLE mytable ADDINDEX name_city_age (name(10),city,age);
建表时,usernname长度为 16,这里用10。这就因为一般情况下名字的长度是不会超过10的,这样会加速索引查询速度,还会减少索引文件的大小,提高INSERT的更新速度。
好了,以上就是本篇文章的所有内容了,还想了解更多java常见问答信息,记得来关注本站消息哦。
推荐阅读: