mysql 视图会走索引吗_MySQL索引和视图
一、什么是索引?
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。
索引分为聚簇索引和非聚簇索引两种,聚簇索引是按照数据存放的物理位置为顺序的,而非聚簇索引就不一样了;聚簇索引能提高多行检索的速度,而非聚簇索引对于单行的检索很快
要注意的是,建立太多的索引将会影响更新和插入的速度,因为它需要同样更新每个索引文件。对于一个经常需要更新和插入的表格,就没有必要为一个很少使用的where字句单独建立索引了,对于比较小的表,排序的开销不会很大,也没有必要建立另外的索引。
1、普通索引
普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。因此,应该只为那些最经常出现在查询条件(WHERE column = …)或排序条件(ORDER BY column)中的数据列创建索引。只要有可能,就应该选择一个数据最整齐、最紧凑的数据列(如一个整数类型的数据列)来创建索引。
1.1直接创建索引(length表示使用名称前1ength个字符)
CREATE INDEX index_name ON table_name(column_name(length))
1.2修改表结构的方式添加索引
ALTER TABLE table_name ADD INDEX index_name ON (column_name)
1.3创建表的时候同时创建索引
CREATE TABLE table_name (
id int(11) NOT NULL AUTO_INCREMENT ,
title char(255) NOT NULL ,
PRIMARY KEY (id),
INDEX index_name (title)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
1.4删除索引
DROP INDEX index_name ON table_name;
1.5建立复合索引 。
CREATE INDEX mytable_categoryid_userid ON mytable (category_id,user_id);
2、唯一索引
与普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值(注意和主键不同)。如果是组合索引,则列值的组合必须唯一,创建方法和普通索引类似。
如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。这么做的好处:一是简化了MySQL对这个索引的管理工作,这个索引也因此而变得更有效率;二是MySQL会在有新记录插入数据表时,自动检查新记录的这个字段的值是否已经在某个记录的这个字段里出现过了;如果是,MySQL将拒绝插入那条新记录。也就是说,唯一索引可以保证数据记录的唯一性。事实上,在许多场合,人们创建唯一索引的目的往往不是为了提高访问速度,而只是为了避免数据出现重复。
2.1创建唯一索引
CREATE UNIQUE INDEX index_name ON table_name(column_name)
2.2修改表结构
ALTER TABLE table_name ADD UNIQUE index_name ON (column_name)
2.3创建表的时候直接指定
CREATE TABLE table_name (
id int(11) NOT NULL AUTO_INCREMENT ,
title char(255) NOT NULL ,
PRIMARY KEY (id),
UNIQUE index_name (title)
);
3、主索引
必须为主键字段创建一个索引,这个索引就是所谓的”主索引”。主索引与唯一索引的唯一区别是:前者在定义时使用的关键字是PRIMARY而不是UNIQUE。
二、什么视图?
视图是一种虚拟的表,是从数据库中一个或者多个表中导出来的表。数据库中只存放了视图的定义,而并没有存放视图中的数据,这些数据存放在原来的表中。使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。
1、视图的作用:
(1)使操作简便化;
(2)增加数据的安全性;
(3)提高表的逻辑独立性;
2、创建视图
CREATE [ ALGORITHM ={ UNDEFIEND | MERGE | TEMPTABLE }]
VIEW 视图名[ ( 属性清单) ]
AS SELECT 语句
[
WITH [ CASCADED | LOCAL ] CHECK OPTION ];
2.1在单表上创建视图
CREATE VIEW v1 AS SELECT * FROM
t_book;
CREATE VIEW v2 AS SELECT
bookName,price FROM t_book;
CREATE VIEW v3(b,p) AS SELECT
bookName,price FROM t_book;
2.2在多表上创建视图
CREATE VIEW v4 AS SELECT bookName,bookTypeName FROM t_book,t_booktype
WHERE t_book.bookTypeId=t_booktype.id;
CREATE VIEW v5 AS SELECT tb.bookName,tby.bookTypeName FROM t_book
tb,t_booktype tby WHERE tb.bookTypeId=tby.id;
3、查看视图3.1
DESCRIBE 语句查看视图基本信息
DESC v5;
3.2 SHOW TABLE STATUS 语句查看视图基本信息
SHOW TABLE STATUS
LIKE 'v5';
3.3 SHOW CREATE VIEW 语句查看视图详细信息
SHOW TABLE STATUS
LIKE 't_book';
3.4 在views 表中查看视图详细信息
SHOW CREATE VIEW v5;
4、修改视图
4.1 CREATE OR REPLACE VIEW 语句修改视图
CREATE OR REPLACE [ ALGORITHM ={ UNDEFINED | MERGE | TEMPTABLE }]
VIEW 视图名[( 属性清单)]
AS SELECT
语句
[ WITH [
CASCADED | LOCAL ] CHECK OPTION ];
例如:
CREATE OR REPLACE VIEW v1(bookName,price)
AS SELECT bookName,price
FROM t_book;
4.2 ALTER 语句修改视图
ALTER [ ALGORITHM ={ UNDEFINED | MERGE | TEMPTABLE }]
VIEW 视图名[( 属性清单)]
AS
SELECT 语句
[ WITH [
CASCADED | LOCAL ] CHECK OPTION ];
例如:
ALTER VIEW v1 AS SELECT * FROM t_book;
5、更新视图
更新视图是指通过视图来插入(INSERT)、更新(UPDATE)和删除(DELETE)表中的数据。因为视图是一个虚拟的表,其中没有数据。通过视图更新时,都是转换基本表来更新。更新视图时,只能更新权限范围内的数据。超出了范围,就不能更新。
5.1 插入(INSERT)
INSERT INTO v1 VALUES(NULL,'java good',120,'feng',1);
5.2 更新(UPDATE)
UPDATE v1 SET bookName='java very good',price=200 WHERE id=5;
5.3 删除(DELETE)
DELETE FROM v1 WHERE id=5;
6、删除视图
删除视图是指删除数据库中已存在的视图。删除视图时,只能删除视图的定义,不会删除数据;
DROP VIEW [ IF EXISTS ] 视图名列表[ RESTRICT | CASCADE ]
DROP VIEW IF EXISTS v4;
mysql 视图会走索引吗_MySQL索引和视图相关推荐
- mysql多索引结构_MySQL 索引结构
谈到 MYSQL 索引服务端的同学应该是熟悉的不能再熟悉,新建表的时候怎么着都知道先来个主键索引,对于经常查询的列也会加个索引加快查询速度.那么 MYSQL 索引都有哪些类型呢?索引结构是什么样的呢? ...
- mysql索引参数_MySQL索引介绍
索引由数据库表中一列或者多列组合而成,其作用是提高对表中数据的查询速度. 创建索引是指在某个表的一列或者多列上建立一个索引,用来提高对表的访问速度, 创建索引由三种方法:在创建表的时候创建,在已存在的 ...
- mysql 索引未命中_mysql索引命中规则
最左匹配原则 1.先定位该sql的查询条件,有哪些,那些是等值的,那些是范围的条件. 2.等值的条件去命中索引最左边的一个字段,然后依次从左往右命中,范围的放在最后. 分析讲解 1.mysql的索引分 ...
- mysql 子查询索引失效_mysql 索引失效的情况
索引失效的几种情况 1.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因) 要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引 2.对于多列索引,不是使用 ...
- mysql的索引优化_MySQL索引优化与分析(重要)
建表SQL CREATE TABLE staffs ( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR (24) NULL DEFAULT '' COM ...
- mysql多列索引用处_MySQL索引使用说明(单列索引和多列索引)
1. 单列索引 在性能优化过程中,选择在哪些列上创建索引是最重要的步骤之一.可以考虑使用索引的主要有两种类型的列:在Where子句中出现的列,在join子句中出现的列.请看下面这个查询: 这个查询与前 ...
- mysql 索引语法_MySQL 索引:语法及案例剖析
MySQL 索引 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索 ...
- mysql索引分析_MySQL索引分析和优化
什么是索引? 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录.表里面 ...
- mysql选择索引逻辑_Mysql索引选择逻辑
有时候我们会发现mysql可能出现选错索引的情况,要了解这个问题我们得先看看sql优化器是怎么选择索引的 索引选择逻辑 优化器选择索引的目的,是找到一个最优的执行方案,并用最小的代价去执行语句.在数据 ...
最新文章
- TypeScript 素描 - 函数
- FE之DR之线性降维:PCA/白化、LDA算法的数学知识(协方差矩阵)、相关论文、算法骤、代码实现、案例应用等相关配图之详细攻略
- MyBatis逆向工程自动生成代码(附数据库表结构)
- java中的JDBC
- python语言用法_python语言基本语句用法总结(1.)
- 如何通过Restful API的方式读取SAP Commerce Cloud的Product Reference
- Why product sales area is not replicated to CRM
- 微软公布 Windows Phone 8 多项新特性
- [css] 在css中为什么说不建议使用@import?
- 微型计算机原理risc,微型计算机原理习题及解答-20210409003329.docx-原创力文档
- 工作流实战_07_flowable 流程定义查看流程图和xml
- ORACLE 發送郵件(全)
- Atitit 性能指标与性能提升的5个原则与性能提升模型
- c++几个类互相包含
- unity及unity hub下载官网
- 苹果键盘快捷键驱动_如何在Windows中使用键盘快捷键打开光盘驱动器
- onenote 0xE000078D解决
- IDEA相对路径没有效果的问题
- 16讲项目实战详细页制作及与首页和内页的链接添加
- 360度评估反馈实施的注意事项