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. ZOJ 1608 Two Circles and a Rectangle

    Give you two circles and a rectangle, your task is to judge wheather the two circles can be put into ...

  2. python时间序列数据的对齐和数据库的分批查询

    欲直接下载代码文件,关注我们的公众号哦!查看历史消息即可! 0. 前言 在机器学习里,我们对时间序列数据做预处理的时候,经常会碰到一个问题:有多个时间序列存在多个表里,每个表的的时间轴不完全相同,要如 ...

  3. firefox设置

    如果长期使用linux(我常使用的是fedora)的朋友,就会知道,默认情况下,只要是这台linux再内网,开机几个小时后就无法再访问 google 和webqq 这些网站了并且打开一些网站也是要话上 ...

  4. webbench 源代码

    WebBench源码:https://github.com/EZLippi/WebBench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问 ...

  5. redis渐进式 rehash

    转载(http://redisbook.com/preview/dict/incremental_rehashing.html) 上一节说过, 扩展或收缩哈希表需要将 ht[0] 里面的所有键值对 r ...

  6. 怎么设置cookie,怎么设置cookie以及删除cookie和cookie详解

    在操作cookie之前,先来看一下cookie长什么样. 可以看到,cookie是一个个键值对(“键=值”的形式)加上分号空格隔开组合而成, 形如: "name1=value1; name2 ...

  7. Linux服务器下日志截取

    我们经常需要去Linux服务器上查看服务运行日志,但是有时候日志文件很大看起来很不方便,这个时候我们需要对日志进行切割筛选出自己需要的日志,比如查看某段时间内的日志,命令如下:   sed -n '/ ...

  8. 100-continue

    https://wiki.open.qq.com/wiki/技术优化原则#1._.E7.A8.8B.E5.BA.8F.E8.AE.BE.E8.AE.A1.E6.97.B6.E9.9C.80.E8.A6 ...

  9. [转]JVM调优总结 -Xms -Xmx -Xmn -Xss

    Xms 是指设定程序启动时占用内存大小.一般来讲,大点,程序会启动的快一点,但是也可能会导致机器暂时间变慢. Xmx 是指设定程序运行期间最大可占用的内存大小.如果程序运行需要占用更多的内存,超出了这 ...

  10. Java基础 println print 实现输出换行

        JDK :OpenJDK-11      OS :CentOS 7.6.1810      IDE :Eclipse 2019‑03 typesetting :Markdown   code ...