MySQL索引、视图
什么是索引
汉语字典中的汉字按页存放,⼀般都有汉语拼音目录(索引)、偏旁部首目录等
我们可以根据拼音或偏旁部首,快速查找某个字词
理解索引
首先:先假设有⼀张表,表的数据有10W条数据,其中有⼀条数据是name=’newdream‘,如果要拿这条数据的话需要些的sql是
SELECT * FROM stu WHERE name= ’newdream'
⼀般情况下,在没有建立索引的时候,mysql需要扫描全表及扫描10W条数据找这条数据,如果在name字段上建立索引,那么mysql只需要扫描⼀⾏数据及为我们找到这条name=’newdream‘的数据,这样的情况下查询的速度会要提⾼很多
索引关键字的选取原则
索引的设计往往需要⼀定的技巧,掌握了这些技巧,可以确保索引能够⼤幅地提升数据检索效率,弥补索引在数据更新⽅面带来的缺陷。
原则1:表的某个字段值离散度越⾼,该字段越适合选作索引的关键字。
原则2:占用储存空间少的字段更适合选作索引的关键字。
原则3:较频繁地作为where查询条件的字段应该创建索引,分组字段或者排序字段应该创建索引,两个表的连接字段应该创建索引。
原则4:更新频繁的字段不适合创建索引,不会出现在where⼦句中的字段不应该创建索引。
原则5.最左前缀原则
原则6.尽量使用前缀索引
创建索引
索引的种类:
- 主索引、聚簇索引
- 唯⼀性索引
- 普通索引
- 复合索引
- 全⽂索引(fulltext)
⽅法⼀:创建表的同时创建索引
create table 表名(
字段名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 ] )
使用索引
使用索引的语法格式如下。
select studentid,score
from score use index(index_stuid)
where studentid>=3;
删除索引
删除索引的语法格式如下。
drop index 索引名 on 表名
视图
视图与表有很多相似的地⽅,视图也是由若⼲个字段以及若⼲条记录构成,视图也可以作为select语句的数据源。甚⾄在
某些特定条件下,可以通过视图对表进⾏更新操作。
视图中保存的仅仅是⼀条select语句,视图中的源数据都来自于数据库表,数据库表称为基本表或者基表,视图称为虚表。
创建视图
创建视图的语法格式如下。
create view 视图名 [ (视图字段列表) ] as select语句
视图的作用
1.使操作变得简单
2.避免数据冗余
3.增强数据安全性
4.提⾼数据的逻辑独立性
删除视图
如果某个视图不再使用,可以使用drop view语句将该视图删除,语法格式如下。
drop view 视图名