创建数据库表时,初学者通常仅仅关注该表有哪些字段、字段的数据类型及约束条件等信息,数据库表中另一个重要的概念“索引”很容易被忽视。
1.理解索引
想象一下现代汉语词典的使用方法,理解索引的重要性。
(1)索引的本质是什么?
(2)MySQL数据库中,数据是如何检索的?
(3)一个数据库表只能创建一个索引吗?
(4)什么是前缀索引?
(5)索引可以是字段的组合吗?
(6)能跨表创建索引吗?
(7)索引数据需要额外的存储空间吗?
(8)表中的哪些字段适合选作表的索引?什么是主索引?什么是聚簇索引?
(9)索引与数据结构是什么关系?
(10)索引非常重要,同一个表,表的索引越多越好吗?
2.索引关键字的选取原则
索引的设计往往需要一定的技巧,掌握了这些技巧,可以确保索引能够大幅地提升数据检索效率,弥补索引在数据更新方面带来的缺陷。
原则1:表的某个字段值离散度越高,该字段越适合选作索引的关键字。
原则2:占用储存空间少的字段更适合选作索引的关键字。
原则3:较频繁地作为where查询条件的字段应该创建索引,分组字段或者排序字段应该创建索引,两个表的连接字段应该创建索引。
原则4:更新频繁的字段不适合创建索引,不会出现在where子句中的字段不应该创建索引。
原则5:最左前缀原则。
原则6:尽量使用前缀索引。
3.索引与约束
约束主要用于保证业务逻辑操作数据库时数据的完整性;约束是逻辑层面的概念。索引则是将关键字数据以某种数据结构的方式存储到外存,用于提升数据的检索性能;索引既有逻辑上的概念,更是一种物理存储方式,且实际存在、需要耗费一定的储存空间。
4.创建索引
创建索引的方法有两种。
方法一:创建表的同时创建索引,其语法格式如下:
create table 表名((www.xing528.com)
字段名1 数据类型 [约束条件],
…
[其他约束条件],
…
[unique | fulltext] index [索引名]( 字段名 [(长度)] [asc | desc] )
)engine=存储引擎类型 default charset=字符集类型
例:
create table book(
isbn char(20)primary key,
name char(100)not null,
brief_introduction text not null,
price decimal(6,2),
publish_time date not null,
unique index isbn_unique(isbn),
index name_index(name(20)),
fulltext index brief_fulltext(name,brief_introduction),
index complex_index(price,publish_time)
)engine=MyISAM default charset=gbk;
方法二:在已有表上创建索引。
语法格式一:
create [unique | fulltext] index 索引名 on 表名(字段名 [(长度)] [asc | desc] )
语法格式二:
alter table 表名 add [unique | fulltext] index 索引名(字段名 [(长度)] [asc | desc] )
5.删除索引
删除索引的语法格式如下:
drop index 索引名 on 表名
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。