1. 索引
(1)
索引:表中一列或多列组合而成
作用:提高查询速度【降低了插入数据的速度】
所有存储引擎对每个表至少支持16个索引,总索引长度至少为256字节
InnoDB、MyISAM支持BTREE索引 MEMORY支持HASH索引和BTREE索引
(2)分类
①普通索引
创建索引时不加任何限制条件
②唯一性索引
用UNIQUE参数设置索引为唯一性索引
③全文索引
FULLTEXT参数,只能创建在CHAR、VARCHAR、TEXT类型字段上。查询数据量较大的字符串类型字段时,使用全文索引可提高查询速度。
④单列索引
在表中单个字段上创建索引(此所有可以是普通、唯一性索引、全文索引)
⑤多列索引
在多个字段上创建一个索引,只有查询条件中使用了这些字段中的第一个字段时,索引才会被使用
⑥空间索引
SPATIAL参数,用于空间数据类型(GEOMETRY、POINT、LINESTRING、POLYGON)
2. 创建索引
(1)创建表时创建索引
CREATE TABLE 表名(属性名 数据类型 约束, ... [UNIQUE | FULLTEXT|SPATIAL] INDEX|KEY [索引别名] (属性名1 [(长度)]) [ASC|DESC] );
①创建普通索引
例:
CREATE TABLE index1(id INT, name VARCHAR(20), sex BOOLEAN, INDEX(id) );
(2)在已经存在的表上创建索引
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX 索引名 ON 表名 (属性名 [(长度)] [ASC|DESC]);
(3)ALTER TABLE创建索引
ALTER TABLE 表名 ADD [UNIQUE|FULLTEXT|SPATIAL] INDEX 索引名(属性名 [(长度)] [ASC|DESC]);
3. 删除索引
DROP INDEX 索引名 ON 表名;
4. 查看索引
SHOW INDEX FROM 表名\G;
--------------------------------------------------------------------------------------------------------------
视图
1.
视图是从一个或多个表中导出来的虚拟表,通过视图可使不同用户只查看同一个表中该用户关系的部分。
数据库中只存放了视图的定义而没有存放视图中的数据(数据还在原来的表中)
2. 创建视图
CREATE [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}] VIEW 视图名 [(属性列表)] AS SELECT 语句 [WITH [CASCADED|LOCAL] CHECK OPTION];
UNDEFINED:mysql自动选择要使用的算法
MERGE:将使用视图的语句与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分
TEMPTABLE:将视图结果存入临时表,然后使用临时表执行语句
CASCADED:更新视图时要满足所有相关视图和表的条件,默认
LOCAL:更新视图时,要满足该视图本身的定义的条件即可
3. 查看视图
DESC 视图名; SHOW TABLE STATUS LIKE ‘视图名‘; SHOW CREATE VIEW 视图名; SELECT * FROM information_shecma.views;
所有视图定义都存在information_schema数据库下的views表中
4. 修改视图
(1)
CREATE OR REPLACE [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}] VIEW 视图名 [(属性列表)] AS SELECT 语句 [WITH [CASCADED|LOCAL] CHECK OPTION];
(2)
ALTER [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}] VIEW 视图名 [(属性列表)] AS SELECT 语句 [WITH [CASCADED|LOCAL] CHECK OPTION];
5. 更新视图
通过视图插入、更新、删除表中数据
对视图的更新操作都反映到实际的表上,除了部分情况:
①视图中含SUM()、COUNT()、MAX()、MIN()等函数
②视图中含UNION、UNION ALL、DISTINCT、GROUP BY、HAVING等关键字
③常量视图
例:
CREATE VIEW view1 AS SELECT ‘abc‘ AS name;
④由不可更新的视图导出的视图
即SELECT 是从一个不可更新的视图中取的数据
⑤ALGORITHM指定了TEMPTABLE类型
⑥视图对应的表上存在没有默认值的列,而该视图不包含该列。更新视图时,该字段将没有值插入,数据库会阻止视图更新。
6. 删除视图
删除的是视图的定义
DROP VIEW [IF EXISTS] 视图名列表 [RESTRICT|CASCADE];