索引分类
- 普通索引
- 唯一索引
- 全文索引
- 单列索引、多列索引
- 组合索引
索引的设计原则
- 索引并非越多越好
- 避免对经常更新的表进行过多的索引,并且索引列应尽可能少
- 数据量小的表最好不要使用索引
- 在条件表达式中经常会用到的不同值较多的列上要建立索引,在不同值少的列上不要建立索引
- 当唯一性是某种数据本身的特征时,指定唯一索引
- 在频繁进行排序或分组的列上建立索引,如果带排序的列有多个,可以在这些列上建立组合索引
创建索引
- 在创建表时创建索引
create table table_name
(
Column_definition,
[unique | fulltext ] index | key [index_name] (col_name [(len)] [asc | desc] )
);
unique 和 fulltext : 可选参数
分别表示唯一索引和全文索引
全文索引在 5.6 版本以后才支持index 和 key
为同义词,任选其一,作用相同
- index_name
- col_name :需要创建索引的 字段列
len
索引长度,只有字符串类型的字段才能指定索引长度
- create index
create [unique | fulltext] index index_name on table_name
(col_name [(len)] [asc | desc],..... );
create index index_id on data(name);
- alter table … index
alter table table_name add index | key [index_name]
(col_name [(len)] [asc | desc],..... );
alter table data add index index_num (number);
查看索引
- show index from table_name from databases
- show index from databases.table_name
删除索引
- drop index index_name on table_name
- alter table table_name drop index index_name
视图
- 视图是一个虚拟表,其内容由查询定义
视图的作用
简单性
安全性
逻辑独立性
创建视图
create [or replace] [algorithm = {undefined | merge | temptable }]
view view_name [(column_list)]
as select_statement
[with [cascaded | local ] check option ]
replace
表示替换已经创建的视图,若视图不存在,则创建一个视图。
algorithm
表示视图的算法,可选择 undefined , merge, temptable
undefined 自动选择算法merge 将使用的视图语句与视图定义合并,使得视图定义的某一部分取代语句对应的部分
temptable 将视图的结果存入临时表,然后用临时表来执行语句
- view_name
- column_list : 属性列
- select_statement : 表示select语句
[with [cascaded | local ] check option ]
表示视图在更新时保证在视图的操作权限范围之内
cascaded
表示更新视图时要满足所有相关视图和表的条件
local
表示更新视图时满足视图本身定义的条件
创建视图时要注意
- 运行创建视图的语句需要用户具有创建视图的权限
- select语句不能包含from子句中的子查询
- select语句不能引用系统或用户变量
- select 语句不能引用预处理语句参数
- 在存储子程序内,定义不能引用子程序参数或局部变量
- 在定义中引用的表或视图必须存在
- 在定义中不能引用temporary 表,不能创建 temporary 视图
- 不能将触发程序与视图关联在一起
- 在视图定义中允许使用 order by
查看视图的定义
1. describe view_name | desc view_name
2. show table status like 'view_name';
3. show create view 'view_name';
4. select * from database_name.views
where table_name = 'view_name';
修改视图定义
- create or replace view
create or replace view
[algorithm = {undefined | merge | temptable }]
view view_name [ { column_list } ]
as select_statement
[with [cascaded | local ] check option ]
- alter view
alter view
[algorithm = {undefined | merge | temptable }]
view view_name [ { column_list } ]
as select_statement
[with [cascaded | local ] check option ]
- 删除视图
drop view [if exists ] view_name [, view_name2]..
restrict | cascade ]
- 视图数据更新