MYSQL优化实施方案:https://www.cnblogs.com/clsn/p/8214048.html

  1. 对查询时经常用到的字段建立索引,如包含多个也可以构建复合索引,建立索引之后需要注意的一点是,查询时要确保和设计字段的格式是一致,如

    SELECT * FROM TABLE WHERE USER_ID = 12345

    这里USER_ID的类型是NUMBER,而实际设计表时如果USER_ID的类型是VARCHAR时,这里索引就会用不到,从而造成全表扫描。如发现查询时间过长,可以用

    explain SELECT * FROM TABLE WHERE USER_ID = 12345

    来查看明细

  2. 当表过大时,可以将老数据,历史数据进行归档(前提这些数据以后不用),减少数据量!!

  3. 经常用到的查询,或者较为复杂的查询时(多个表的联合查询)可以创建视图。

    视图的优缺点:

    优点:

    • [ ] 视图提供表的抽象。可以轻松地在视图中添加/删除字段,而无需修改基础架构。
    • [ ] 视图可以很容易地建模复杂的连接。。
    • [ ] 视图可以对你隐藏特定于数据库的内容。例如,如果需要使用Oracles sys进行一些检查_上下文函数或许多其他东西
    • [ ] 可以轻松地在视图上直接管理你的授权,而不是实际的表。如果知道某个用户可能只访问某个视图,则更容易管理。
    • [ ] 视图可以帮助你实现向后兼容性。可以更改基础架构,但视图可以向某个客户端隐藏这些事实。(比较常见的应用就是校园数据库中,学生表中存有班级、学分、学费、杂费等数据,然而对于老师的办公室中的应用来说,不该让他们看到学费、杂费之类的会计方面的数据,那么就不给他们此表的访问权限,而单独给他们一个河蟹过的视图,)

    缺点:

    • [ ] 将丢失有关关系的信息(主键、外键)
    • [ ] 不清楚是否能够插入/更新视图,因为视图对你隐藏了它的底层联接
  4. 尽量不要有空判断的语句,空判断会导致全表扫描,对于空判断这种情况,可以考虑对这个列创建数据库默认值。

  5. 尽量不用不等于条件,这样容易导致全表扫描,尽量使用范围查询。

  6. 尽量使用exists代替In,或者用外连接代替in

  7. 尽量不用or条件,会导致全表扫描,可以分开查询然后union all

  8. 分库分表。如果是HIVE还可以分桶,HIVE的分区中,每个分区以文件夹的形式单独存放在表文件夹的目录下,桶则是文件形式

  9. 左模糊查询尽量不要使用,会引起全表扫描

  10. 理论上尽量多使用多表查询(left),少使用子查询

  11. WHERE子句中的连接顺序.:

    ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.

  12. 优化group by,提高GROUP BY 语句的效率, 可以通过将不需要的记录在GROUP BY 之前过滤掉。

  13. 加上并行化参数

  14. 应该还有很多其他方法,暂时想不起来

SQL优化——select的更多相关文章

  1. 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 ...

  2. 从多表连接后的select count(*)看待SQL优化

    从多表连接后的select count(*)看待SQL优化 一朋友问我,以下这SQL能直接改写成select count(*) from a吗? SELECT COUNT(*) FROM a LEFT ...

  3. mysql5.7官网直译SQL语句优化--select语句优化

    8.2 sql语句优化 大致内容如下: 8.2.1:SELECT语句的优化 8.2.2:优化子查询,派生表和试图引用 8.2.3:优化INFORMATION_SCHEMA查询 8.2.4:优化数据改变 ...

  4. SQL优化之SELECT COUNT(*)

    前言 SQL优化之SQL 进阶技巧(上) SQL优化之SQL 进阶技巧(下)中提到使用以下 sql 会导致慢查询 SELECT COUNT(*) FROM SomeTable SELECT COUNT ...

  5. SQL优化案例—— RowNumber分页

    将业务语句翻译成SQL语句不仅是一门技术,还是一门艺术. 下面拿我们程序开发工程师最常用的ROW_NUMBER()分页作为一个典型案例来说明. 先来看看我们最常见的分页的样子: WITH CTE AS ...

  6. sql 优化

    1.选择最有效率的表名顺序(只在基于规则的优化器中有效): oracle的解析器按照从右到左的顺序处理 from 子句中的表名,from子句中写在最后的表(基础表driving table)将被最先处 ...

  7. SQL 优化总结

    SQL 优化总结 (一)SQL Server 关键的内置表.视图 1. sysobjects         SELECT name as '函数名称',xtype as XType  FROM  s ...

  8. (转)SQL 优化原则

    一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用 系统提交实际应用后,随着数据库中数据的增加,系 ...

  9. mysql sql优化实例

    mysql sql优化实例 优化前: pt-query-degist分析结果: # Query 3: 0.00 QPS, 0.00x concurrency, ID 0xDC6E62FA021C85B ...

随机推荐

  1. P1903 [国家集训队]数颜色 (带修改莫队)

    题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2 ...

  2. 37、数据源之通用的load和save操作

    一.通用的load和save操作 1.概述 对于Spark SQL的DataFrame来说,无论是从什么数据源创建出来的DataFrame,都有一些共同的load和save操作. load操作主要用于 ...

  3. 19、Executor原理剖析与源码分析

    一.原理图解 二.源码分析 1.Executor注册机制 worker中为Application启动的executor,实际上是启动了这个CoarseGrainedExecutorBackend进程: ...

  4. MySQL 常用字段类型与对应的Java类型

    varchar 不定长字符串 字符串或是没有合适类型时,可以选择它作为字段类型 对应Java中的String int bigint 数值 一般以int作为数字的默认选择,数值很大时使用bigint 对 ...

  5. 再做一遍floyed

    #include<bits/stdc++.h> #define R register int using namespace std; const int inf=0x3f3f3f3f; ...

  6. Pytest权威教程02-Pytest 使用及调用方法

    目录 Pytest 使用及调用方法 使用python -m pytest调用pytest 可能出现的执行退出code 获取版本路径.命令行选项及环境变量相关帮助 第1(N)次失败后停止测试 指定及选择 ...

  7. Pytest权威教程10-捕获警告信息

    目录 捕获警告信息 @pytest.mark.filterwarnings 禁用警告摘要 完全禁用警告捕获 弃用警告和待命记录警告 确保代码触发弃用警告 用警告函数断言警告 录制警告 自定义失败消息 ...

  8. comobox在datagrid里,当滚动scrollbar时,会导致comobox选中项被重置的解决办法

    VirtualizingStackPanel.IsVirtualizing="False"

  9. [SCOI2005][BZOJ 1084]最大子矩阵

    Description 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. Input 第一行为n,m,k(1≤n≤100,1≤m≤2 ...

  10. JavaWeb之Tomcat(2) —— Tomcat的使用

    1. 启动和关闭Tomcat (1) 打开Tomcat的安装目录,在 bin 目录下,有四个文件: startup.bat 和 startup.sh,他们分别是Windows环境下的批处理文件和Lin ...