六、MySQL索引视图

文章是个人整理,方便日后查阅复习

视图

1.视图是什么

视图通过以定制的方式显示来自一个或多个表的数据

视图是一种数据库对象,用户可以像查询普通表一样查询视图

视图内其实没有存储任何数据,它只是对表的一个查询

视图的定义保存在数据字典内,创建视图所基于对表称为“基表”

2.视图的优点和作用

作用
  • 控制安全
  • 保存查询的数据
优点
  • 提供了灵活一致级别安全性。
  • 隐藏了数据的复杂性
  • 简化了用户的SQL指令
  • 通过重命名列,从另一个角度提供数据

3.创建视图

creat [or replace] view 视图名
as sellect [字段1,字段2...] from 表名  
where ...;

4.视图使用规则

  1. 视图必须有唯一命名
  2. 在mysql中视图的数量没有限制
  3. 创建视图必须从管理员那里获得必要的权限
  4. 视图支持嵌套,也就是说可以利用其他视图检索出来的数据创建新的视图
  5. 在视图中可以使用OREDR BY,但是如果视图内已经使用该排序子句,则视图的ORDER BY将覆
    盖前面的
    ORDER BY。
  6. 视图不能索引,也不能关联触发器或默认值
  7. 视图可以和表同时使用

5.修改视图

1.直接使用or relpace进行替换

creat or replace view emp_v_10
(id, name, sal, dept_id)
AS SELECT id,name,
salary, dept_id
FROM employees
WHERE dept_id = 10;
alter view emp_v_10
(id, name, sal, dept_id)
AS SELECT id,name,
salary, dept_id
FROM employees
WHERE dept_id = 10;

6.删除视图

drop view 视图名;

索引

MySQL的索引包括

普通索引
惟一性索引
全文索引
单列索引
多列索引
空间索引
.......等

索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。

一般数据库默认都会为主键生成索引)

1.什么是索引

模式(schema)中的一个数据库对象
在数据库中用来加速对表的查询
通过使用快速路径访问方法快速定位数据,减少了磁盘的I/O
与表独立存放,但不能独立存在,必须属于某个表
由数据库自动维护,表被删除时,该表上的索引自动被删除。
索引的作用类似于书的目录,几乎没有一本书没有目录,因此几乎没有一张表没有索引。

索引的原理
就是把无序的数据变成有序的查询

  1. 把创建的索引的列的内容进行排序
  2. 对排序结果生成倒排表
  3. 在倒排表内容上拼上数据地址链
  4. 在查询的时候,先拿到倒排表内容,再取出数据地址链,从而拿到具体数据

2.索引优缺点

优点

提高检索效率

缺点

创建和维护索引要耗费时间耗费时间的数量随着数据量的增加而增加;
索引需要占用物理空间,每一个索引要占一定的物理空间;
增加、删除和修改数据时,要动态的维护索引,造成数据的维护速度降低了。

3.索引分类

4.索引设计原则

5.创建索引

创建索引是指在某个表的一列或多列上建立一个索引,以便提高对表的访问速度。
创建索引有三种方式,这三种方式分别是:
创建表的时候创建索引
在已经存在的表上创建索引
使用ALTER TABLE语句来创建索引

1.普通索引
# 直接创建索引
CREATE INDEX IndexName ON `TableName`(`字段名`(length));
# 或者
ALTER TABLE TableName ADD INDEX IndexName(`字段名`(length));

# 创建表的时候同时创建索引

Create table index1(
Id int,
Name varchar(20),
Sex boolean,
index(id),
);

# 修改表结构的方式添加索引
ALTER TABLE table_name ADD INDEX index_name ON (column(length))

# 查询索引
Show create table index1 \G

# 查询某张表中索引情况
show index from table_name;
# 使用计划查询SQL使用索引情况

Explain select * from index1 where id=1 \G

# 删除索引
DROP INDEX index_name ON table
2 创建唯一性索引 ,当然也有多种创建方式
Create table index2(
Id int unique,
Name varchar(20),
Unique index index2_id(id asc)
);
3 创建全文索引(FULLTEXT)
# MySQL从3.23.23版开始支持全文索引和全文检索,FULLTEXT索引仅可用于 MyISAM 表;
# 他们可以从CHAR、VARCHAR或TEXT列中作为CREATE TABLE语句的一部分被创建,
# 或是随后使用ALTER TABLE 或CREATE INDEX被添加。
# 对于较大的数据集,将你的资料输入一个没有FULLTEXT索引的表中,
# 然后创建索引,其速度比把资料输入现有FULLTEXT索引的速度更为快。
# 不过切记对于大容量的数据表,生成全文索引是一个非常消耗时间非常消耗硬盘空间的做法。

只能创建在char,varchar或text类型的字段上。

create table index3(
Id int,
Info varchar(20),
Fulltext index index3_info(info)
);
explain select * from table where id=1;
4 创建单列索引
Create table index4(
Id int,
Subject varchar(30),
Index index4_st(subject(10))
);
5 创建多列索引
使用多列索引时一定要特别注意,只有使用了索引中的第一个字段时才会触发索引。
如果没有使用索引中的第一个字段,那么这个多列索引就不会起作用。
也就是说多个单列索引与单个多列索引的查询效果不同,因为执行查询时,
MySQL只能使用一个索引,会从多个索引中选择一个限制最为严格的索引。
Create table index5(
Id int,
Name varchar(20),
Sex char(4),
Index index5_ns(name,sex)
);
6 创建空间索引
Create table index6(
Id int,
Space geometry not null,
Spatial index index6_sp(space)
)engine=myisam;


建空间索引时,表的存储引擎必须是myisam类型,而且索引字段必须有非空约束。空间数据类型包括
geometry,point,linestringpolygon类型等。平时很少用到。

create index

在已经存在的表上,可以直接为表上的一个或几个字段创建索引。基本形式如下:help create index
CREATE [ UNIQUE | FULLTEXT | SPATIAL ]  INDEX 索引名
ON 表名 (属性名 [ (长度) ] [  ASC | DESC] );

1.创建普通索引
CREATE INDEX index_name ON table(column(length))

2.创建惟一性索引
CREATE UNIQUE INDEX indexName ON table(column(length))

3.创建全文索引
CREATE FULLTEXT INDEX index_content ON article(content)

4.创建单列索引
CREATE INDEX index3_name on index3 (name(10));

5.创建多列索引

6.创建空间索引

alter table

在已经存在的表上,可以通过ALTER TABLE语句直接为表上的一个或几个字段创建索引。基本形式如下:

ALTER  TABLE 表名  ADD  [ UNIQUE | FULLTEXT | SPATIAL ]  INDEX
索引名(属性名 [ (长度) ] [ ASC | DESC];
1.创建普通索引
ALTER TABLE table_name ADD INDEX index_name (column(length))

2.创建惟一性索引
ALTER TABLE table_name ADD UNIQUE indexName (column(length))

3.创建全文索引
ALTER TABLE index3 add fulltext index index3_name(name);

4.创建单列索引
ALTER TABLE index3 add index index3_name(name(10));

5.创建多列索引

6.创建空间索引
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值