首页 > 数据库 >SQL语句的优化方法二

SQL语句的优化方法二

时间:2023-05-12 18:15:25浏览次数:33  
标签:语句 INDEX DPT BSEMPMS NO WHERE SAL SQL 优化

11. /*+INDEX_JOIN(TABLE INDEX_NAME)*/
提示明确命令优化器使用索引作为访问路径.
例如:
SELECT /*+INDEX_JOIN(BSEMPMS SAL_HMI HIREDATE_BMI)*/ SAL,HIREDATE
FROM BSEMPMS WHERE SAL<60000;

12. /*+INDEX_DESC(TABLE INDEX_NAME)*/
表明对表选择索引降序的扫描方法.
例如:
SELECT /*+INDEX_DESC(BSEMPMS PK_BSEMPMS) */ FROM BSEMPMS WHERE DPT_NO='SCOTT';

13. /*+INDEX_FFS(TABLE INDEX_NAME)*/
对指定的表执行快速全索引扫描,而不是全表扫描的办法.
例如:
SELECT /*+INDEX_FFS(BSEMPMS IN_EMPNAM)*/ * FROM BSEMPMS WHERE DPT_NO='TEC305';

14. /*+ADD_EQUAL TABLE INDEX_NAM1,INDEX_NAM2,...*/
提示明确进行执行规划的选择,将几个单列索引的扫描合起来.
例如:
SELECT /*+INDEX_FFS(BSEMPMS IN_DPTNO,IN_EMPNO,IN_SEX)*/ * FROM BSEMPMS WHERE EMP_NO='SCOTT' AND DPT_NO='TDC306';

15. /*+USE_CONCAT*/
对查询中的WHERE后面的OR条件进行转换为UNION ALL的组合查询.
例如:
SELECT /*+USE_CONCAT*/ * FROM BSEMPMS WHERE DPT_NO='TDC506' AND SEX='M';

16. /*+NO_EXPAND*/
对于WHERE后面的OR 或者IN-LIST的查询语句,NO_EXPAND将阻止其基于优化器对其进行扩展.
例如:
SELECT /*+NO_EXPAND*/ * FROM BSEMPMS WHERE DPT_NO='TDC506' AND SEX='M';

17. /*+NOWRITE*/
禁止对查询块的查询重写操作.

18. /*+REWRITE*/
可以将视图作为参数.

19. /*+MERGE(TABLE)*/
能够对视图的各个查询进行相应的合并.
例如:
SELECT /*+MERGE(V) */ A.EMP_NO,A.EMP_NAM,B.DPT_NO FROM BSEMPMS A (SELET DPT_NO
,AVG(SAL) AS AVG_SAL FROM BSEMPMS B GROUP BY DPT_NO) V WHERE A.DPT_NO=V.DPT_NO
AND A.SAL>V.AVG_SAL;

20. /*+NO_MERGE(TABLE)*/
对于有可合并的视图不再合并.
例如:
SELECT /*+NO_MERGE(V) */ A.EMP_NO,A.EMP_NAM,B.DPT_NO FROM BSEMPMS A (SELECT DPT_NO,AVG(SAL) AS AVG_SAL FROM BSEMPMS B GROUP BY DPT_NO) V WHERE A.DPT_NO=V.DPT_NO AND A.SAL>V.AVG_SAL;

 

标签:语句,INDEX,DPT,BSEMPMS,NO,WHERE,SAL,SQL,优化
From: https://www.cnblogs.com/techcq/p/17395963.html

相关文章

  • mysql的执行计划
    在咱们工作中写sql写多了必然会出现查询比较慢的sql,一般的情况就是会去加索引,但是怎么加索引就很重要了,这个时候一般情况下就是会通过查询条件进行判断加什么索引,要么就是去查看mysql的执行计划然后通过执行计划的结果决定加什么索引,怎么加索引。执行计划mysql官方的解释文档:MyS......
  • MySQL 删除数据表
    MySQL删除数据表MySQL中删除数据表是非常容易操作的,但是你在进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失。语法以下为删除MySQL数据表的通用语法:DROPTABLEtable_name;在命令提示窗口中删除数据表在mysql>命令提示窗口中删除数据表SQL语句为DROPT......
  • SQL Server数据实时同步至Oracle数据库中
    1、使用SSMS中的链接服务器链接Oracle请参考链接  SQLServer客户端链接服务器到Oracle数据库全攻略_sqlserver连接oracle数据库_简单的你我1314的博客-CSDN博客2、使用触发器(insertupdatedelete)获取更改的数据然后同步至Oracle中(使用openquery查询)//openquery语句ORCL......
  • sql server 将datetime类型的字段转化成字符串输出
    SELECTOBJID,NAME,CONVERT(varchar(19),CREATIONDATE,120)ASCREATIONDATEFROM[dbo].[SYS_DOCUMENTREV]WHERENAMELIKE'test%.pdf'ORDERBYCREATIONDATEDESC......
  • Linux 服务器下Mysql自动备份 30天滚动存储 每天凌晨2点准时备份
    一、创建备份目录执行命令:在指定路径下创建备份目录cd/mnt/filemkdirdata_backup二、编写shell脚本放在/mnt/file/data_backup里创建.shshell脚本:touchbkmysql.sh打开脚本文件:vim bkmysql.sh脚本文件内容如下所示:login_user表示数据库用户名......
  • CentOS5.7 下mysql5.7自动备份数据脚本
    mysql5.7自动备份数据库脚本1.root用户下用cd命令进入到想要的位置创建一个脚文文件://创建脚本命令vimbackup.shvim脚本名.sh#!/bin/bashsource/etc/profile#加载系统环境变量source~/.bash_profile#加载用户环境变量set-onounset......
  • MYSQL 查找单个字段或者多个字段重复数据,清除重复数据
    重复数据的情况分为两种:  单个字段数据重复  多个字段数据重复所以该篇的内容就是包括单个字段的重复数据查找 与去重多个字段的重复数据查找 与去重 第一步先查出来所有重复的数据selectt.id,t.subject_id,t.image_id,t.mark_person_idfromdm......
  • 【大揭秘】SQL与NoSQL数据库的优缺点全面对比!一篇文章帮助你轻松解决选择困难症!
    从分析师、工程师到IT决策者,许多人都熟悉关系数据库管理系统(rDBMS)和用于与它们交互的SQL(SQL)。虽然这些术语指的是一个几十年的范式,仍然是一个广泛使用的标准,今天的纯粹的多样性和数据库系统的深度可以令人眼花缭乱。更重要的是,不断增长的各种数据(尤其是非结构化数据数据)......
  • docker 安装mysql
    一、拉取镜像#拉取镜像dockerpullmysql#或者dockerpullmysql:latest#执行版本dockerpullmysql:5.7#以上两个命令是一致的,默认拉取的就是latest版本的#我们还可以用下面的命令来查看可用版本:dockersearchmysql 二、查看镜像使用以下命令来查看是......
  • mysql8.0.33的安装教程
    1、1 MySQL有四种不同的版本:community版、standard版、enterprise版和cluster版。Community版Community版是MySQL最常用的免费版本,它是基于GPL(GNU通用公共许可证)许可协议发布的。它是开源的,可以利用社区的贡献来维护和改进。有非常多的支持和帮助,可以从官方网站下载。Standar......