SQLService 视图加索引查询性能可以提高吗 sql使用视图查询_sql 最大值


SQLService 视图加索引查询性能可以提高吗 sql使用视图查询_sql 视图_02


一、视图

中存放的是实际数据,但是视图中存放的是sql查询语句。

使用视图时,系统会运行视图里的sql查询语句然后创建出一张临时表。


SQLService 视图加索引查询性能可以提高吗 sql使用视图查询_sql 最大值_03

创建视图

1.1 视图的优点

1.在进行汇总复杂查询条件导致这个sql查询语句非常冗杂时,同时所使用的sql语句需要频繁查询时,就可以保存成视图重复使用,可以帮助我们提高效率

2.视图数据会随原表的状态自动更新,因为视图中存放的并不是实际数据,而是视图中存放的是sql查询语句

3.视图不需要保存数据,可以节省空间


SQLService 视图加索引查询性能可以提高吗 sql使用视图查询_sql 最大值_04

如何使用视图

1.2 视图注意事项

1.避免在视图的基础上再创建视图,因为会降低sql查询的效率。

2.一般不能往视图里插入数据,因为会报错,但是某些时候也能对视图进行更新。

3.视图中列的顺序和sql查询语句中列的顺序是一一对应的。

1.3 更新视图时需要的注意事项

如果定义视图的select子句能够满足以下条件,那么这个视图就可以被更新

1.select子句中未使用distinct

2.from子句中只有一张表

3.未使用group by 子句,通过汇总得到的视图无法更新

4.未使用having子句

通过汇总得到的视图并没有原表中的其他列,视图和表需要同时更新(因为视图就是对原表的子查询),因此视图无法进行更新。

二、子查询

什么是子查询:在一个select子句中嵌套了多个select查询语句,相当于创建了一个临时表,在sql查询语句运行结束后,这个临时表就消失了。

系统会先运行子查询,再运行外层select查询语句


SQLService 视图加索引查询性能可以提高吗 sql使用视图查询_sql 最大值_05


in

在sql中,in主要是用来判断数据是否在某个数据集中,因此可以和where以及子查询一起配合使用,增强代码的可读性和执行效率。


SQLService 视图加索引查询性能可以提高吗 sql使用视图查询_sql 视图_06


其实where和in以及子查询不仅能对单个数据列进行判断,同时也能对多个数据列进行判断是否位于某个集合之中,例如:


where (成绩,课程号) in (
select 成绩,课程号 from score
group by 课程号


any

any关键字是用来进行判断,某个数据>any(数据集),就是比数据集中的全部数据中任意一个高就为真。其实最主要是看数据集中的最小值,比最小值大就可以了。


SQLService 视图加索引查询性能可以提高吗 sql使用视图查询_sql视图查询对象无效_07


all

all关键字是用来进行判断,某个数据>all(数据集)就是比数据集中的全部数据都要高就为真。其实最主要是看数据集中的最大值,比最大值大就可以了。

找出列名中成绩比子查询中所有都高 where 成绩>all(子查询)

列名中成绩比子查询中所有成绩高(也就是要比最高的成绩要高)where 成绩>all(子查询),那为什么不用max函数呢?where 成绩 >max(成绩2),因为where中不能使用聚合函数,所以只能使用all。


SQLService 视图加索引查询性能可以提高吗 sql使用视图查询_where后边的子查询返回多个值_08


使用子查询注意事项:

避免使用多层嵌套子查询

要注意sql运行顺序

from->where->group by->having->select->distinct->union->order by->limit

标量子查询

在子查询基础上限制了只能返回一行一列的值,标量子查询不能返回多行结果。


SQLService 视图加索引查询性能可以提高吗 sql使用视图查询_where后边的子查询返回多个值_09


关联子查询

当在每个组内进行比较时,使用关联子查询


SQLService 视图加索引查询性能可以提高吗 sql使用视图查询_sql更新语句_10


SQLService 视图加索引查询性能可以提高吗 sql使用视图查询_sql 最大值_11


三、如何用sql解决业务问题

1.翻译成大白话

2.写出分析思路

3.写出对应的sql子句