SQL优化——select
MYSQL优化实施方案:https://www.cnblogs.com/clsn/p/8214048.html
对查询时经常用到的字段建立索引,如包含多个也可以构建复合索引,建立索引之后需要注意的一点是,查询时要确保和设计字段的格式是一致,如
SELECT * FROM TABLE WHERE USER_ID = 12345
这里USER_ID的类型是NUMBER,而实际设计表时如果USER_ID的类型是VARCHAR时,这里索引就会用不到,从而造成全表扫描。如发现查询时间过长,可以用
explain SELECT * FROM TABLE WHERE USER_ID = 12345
来查看明细
当表过大时,可以将老数据,历史数据进行归档(前提这些数据以后不用),减少数据量!!
经常用到的查询,或者较为复杂的查询时(多个表的联合查询)可以创建视图。
视图的优缺点:
优点:
- [ ] 视图提供表的抽象。可以轻松地在视图中添加/删除字段,而无需修改基础架构。
- [ ] 视图可以很容易地建模复杂的连接。。
- [ ] 视图可以对你隐藏特定于数据库的内容。例如,如果需要使用Oracles sys进行一些检查_上下文函数或许多其他东西
- [ ] 可以轻松地在视图上直接管理你的授权,而不是实际的表。如果知道某个用户可能只访问某个视图,则更容易管理。
- [ ] 视图可以帮助你实现向后兼容性。可以更改基础架构,但视图可以向某个客户端隐藏这些事实。(比较常见的应用就是校园数据库中,学生表中存有班级、学分、学费、杂费等数据,然而对于老师的办公室中的应用来说,不该让他们看到学费、杂费之类的会计方面的数据,那么就不给他们此表的访问权限,而单独给他们一个河蟹过的视图,)
缺点:
- [ ] 将丢失有关关系的信息(主键、外键)
- [ ] 不清楚是否能够插入/更新视图,因为视图对你隐藏了它的底层联接
尽量不要有空判断的语句,空判断会导致全表扫描,对于空判断这种情况,可以考虑对这个列创建数据库默认值。
尽量不用不等于条件,这样容易导致全表扫描,尽量使用范围查询。
尽量使用exists代替In,或者用外连接代替in
尽量不用or条件,会导致全表扫描,可以分开查询然后union all
分库分表。如果是HIVE还可以分桶,HIVE的分区中,每个分区以文件夹的形式单独存放在表文件夹的目录下,桶则是文件形式
左模糊查询尽量不要使用,会引起全表扫描
理论上尽量多使用多表查询(left),少使用子查询
WHERE子句中的连接顺序.:
ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.优化group by,提高GROUP BY 语句的效率, 可以通过将不需要的记录在GROUP BY 之前过滤掉。
加上并行化参数
应该还有很多其他方法,暂时想不起来
SQL优化——select的更多相关文章
- 6.组函数(avg(),sum(),max(),min(),count())、多行函数,分组数据(group by,求各部门的平均工资),分组过滤(having和where),sql优化
1组函数 avg(),sum(),max(),min(),count()案例: selectavg(sal),sum(sal),max(sal),min(sal),count(sal) from ...
- 从多表连接后的select count(*)看待SQL优化
从多表连接后的select count(*)看待SQL优化 一朋友问我,以下这SQL能直接改写成select count(*) from a吗? SELECT COUNT(*) FROM a LEFT ...
- mysql5.7官网直译SQL语句优化--select语句优化
8.2 sql语句优化 大致内容如下: 8.2.1:SELECT语句的优化 8.2.2:优化子查询,派生表和试图引用 8.2.3:优化INFORMATION_SCHEMA查询 8.2.4:优化数据改变 ...
- SQL优化之SELECT COUNT(*)
前言 SQL优化之SQL 进阶技巧(上) SQL优化之SQL 进阶技巧(下)中提到使用以下 sql 会导致慢查询 SELECT COUNT(*) FROM SomeTable SELECT COUNT ...
- SQL优化案例—— RowNumber分页
将业务语句翻译成SQL语句不仅是一门技术,还是一门艺术. 下面拿我们程序开发工程师最常用的ROW_NUMBER()分页作为一个典型案例来说明. 先来看看我们最常见的分页的样子: WITH CTE AS ...
- sql 优化
1.选择最有效率的表名顺序(只在基于规则的优化器中有效): oracle的解析器按照从右到左的顺序处理 from 子句中的表名,from子句中写在最后的表(基础表driving table)将被最先处 ...
- SQL 优化总结
SQL 优化总结 (一)SQL Server 关键的内置表.视图 1. sysobjects SELECT name as '函数名称',xtype as XType FROM s ...
- (转)SQL 优化原则
一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用 系统提交实际应用后,随着数据库中数据的增加,系 ...
- mysql sql优化实例
mysql sql优化实例 优化前: pt-query-degist分析结果: # Query 3: 0.00 QPS, 0.00x concurrency, ID 0xDC6E62FA021C85B ...
随机推荐
- biplot双标图
biplot 双标图 在页面中全部崩溃 句法 biplot(coefs) biplot(coefs,Name,Value) h = biplot(___) 描述 例 biplot(coefs)在矩 ...
- makefile通用模板(二)
DIR_INC = ./include DIR_SRC = ./src DIR_OBJ = ./obj DIR_BIN = ./bin DIR_LIB = /home/exbot/lib LIBS = ...
- webbench 源代码
WebBench源码:https://github.com/EZLippi/WebBench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问 ...
- 第02组 Alpha冲刺(3/6)
第02组 Alpha冲刺(3/6) 队名:無駄無駄组长博客作业博客 组员情况 张越洋 过去两天完成了哪些任务 摸鱼 提交记录(全组共用) 接下来的计划 沟通前后端成员,监督.提醒他们尽快完成各自的 ...
- bootstrap select 多选的用法,取值和赋值(取消默认选择第一个的对勾)
h5自带的select标签可以实现按住ctrl键多选的功能,但是样式及其难看. bootstrap select是很好用的前端插件 首先引入bootstrap和bootstrap-select的c ...
- Docker配置文件详解
先来看一份 docker-compose.yml 文件,不用管这是干嘛的,只是有个格式方便后文解说: version: '2' services: web: image: dockercloud/he ...
- autoComplete TextView
这个比较简单,只是将AutoCompleteTextView绑定一个ArrayAdapter就可以了. 界面布局: <?xml version="1.0" encoding= ...
- Android Support v4、v7、v13、v14、v17的区别和应用场景
Android Support v4.v7.v13.v14.v17的区别和应用场景 本文链接:https://blog.csdn.net/Aquarius_Seven/article/detail ...
- 先查询再插入,改为存储过程,java部分入参出参、mybatisxml【我】
先查询再插入,改为存储过程 create or replace procedure PRO_REVENUE_SI(l_p_cd in Varchar2, l_c_cd in Varchar2, l_p ...
- Qt编写气体安全管理系统20-控制器管理
一.前言 控制器管理,主要就是对控制器进行添加删除和修改,其中包括编号.端口名称.控制器名称.控制器地址.控制器型号.探测器数量这几个字段,端口名称表示当前控制器所属哪个端口,一个系统中可以有好多个端 ...