一般来说,查询sql很慢,大部分都可以通过添加索引来解决,日常开发中

这个方法可以解决 90%以上的问题(甚至是 100% 哈哈)。对于ETL(数仓)开发的同学来说,还能通过 表分区、索引、索引+分区索引 来对sql进一步优化。
索引能力,可以说想当强悍了,那么问题来了,索引如何选择,如何创建,这是个不算问题的问题;对于一个程序开发人员,比如我,是一个java程序员,我所要查询的表,所要用到的查询字段,我肯定是相当熟悉的。索引创建时,我用到的查询条件、多表查询时,关联条件这是索引的首选,而且这样选是没有任何问题的(不绝对哈);但是有时候索引选择的有问题,就会难以达到预期效果,甚至白白造成空间浪费(毕竟索引也是占用空间的,有时甚至占用的比数据本身占用空间还大)。喏,下面这条sql可以检查你索引创建的是否合理,声明下哈,这个sql需要使用拥有dba权限的用户才可以执行,很多表是dba角色才可以访问,如果没有dba权限的同学,不要抱怨,你这啥破sql,直接报“对象不存在”。

-- 索引优化
SELECT b.TABLE_NAME,--表名称b.COLUMN_NAME, --字段名称c.data_type, --字段类型ROUND((DECODE(b.num_distinct, 0, 1, (a.num_rows / b.num_distinct))),0) chose,--选择性b.NUM_DISTINCT,--重复性a.NUM_ROWS,--条数b.NUM_NULLS,--为空行数a.BLOCKS,--大小d.INDEX_NAME --索引名称FROM dba_tables a,     DBA_TAB_COL_STATISTICS b,       dba_tab_columns c, DBA_INDEXES d,DBA_IND_COLUMNS e
WHERE
b.OWNER ='用户名'
AND b.TABLE_NAME ='表名'
AND a.OWNER = b.OWNER
AND b.OWNER= C.OWNER
AND C.OWNER = d.OWNER
AND d.OWNER= e.table_owner
AND a.TABLE_NAME = b.TABLE_NAME
AND b.TABLE_NAME = C.TABLE_NAME
AND C.TABLE_NAME = d.TABLE_NAME
AND d.TABLE_NAME = e.TABLE_NAME
AND d.INDEX_NAME = e. INDEX_NAME
AND b.COLUMN_NAME = C.COLUMN_NAME
AND C.COLUMN_NAME = e.COLUMN_NAME;

具体这些表、字段代表啥含义,请自行百度,不再一一解释。
现在我说下表中哪个列适合创建索引,chose,–选择性 值越大,NUM_DISTINCT,–重复性 与 a.NUM_ROWS,–条数 值越接近,并且 NUM_NULLS,–为空行数 越小。则这个列 作为索引的优先级越高,当
然你要结合自己实际业务场景,对索引列进行进一步筛选。

如果你是dba,或者新员工,对业务表并不熟悉,建议使用以下sql,对
表进行初步筛选,再根据业务进一步定位要给哪列创建索引,选用原则同上。

--粗略分析,可做索引的字段
SELECTb.TABLE_NAME ,b.COLUMN_NAME ,a.num_rows,b.num_distinct, ROUND ( (DECODE (b.num_distinct,0,1,(a.num_rows / b.num_distinct)) ) ,0) chose
FROMdba_tables a,DBA_TAB_COL_STATISTICS b
WHEREb.OWNER = ' SCOTT'--用户名AND b.TABLE_NAME = 'EMP'--表名AND a.OWNER = b.OWNERAND a.TABLE_NAME = b.TABLE_NAME
ORDER BY num_DISTINCT DESC, ROUND ( (DECODE (b.num_distinct,0,1,(a.num_rows / b.num_distinct)) ) ,0)

总结:索引创建准则:
1.业务经常使用的筛选条件
2.表间关联条件
3.空值(null值)较少的列
4.选择性较强的列 chose值大的列,通俗点就是 重复值较少的列

补充:以上sql执行时,依赖于 oracle已经对 数据库进行过自动/手动
进行了统计信息的收集,如果没有进行收集,需要手动收集(需在业务较少时段进行)。

exec dbms_stats.gather_schema_stats('SCOTT');--对用户进行统计收集
exec dbms_stats.gather_table_stats('scott','work_list') ; --指定用户,表

这些内容,都是生产出过问题,或由我们生产dba老师总结的。由于我本地并没有多少数据,且数据库版本较低 11g,无法演示具体案例,请谅解。

oracle 索引优化相关推荐

  1. dataguru北京线下沙龙-第二部 《Oracle 索引优化思路--案例分享 -- 刘盛》

    [视频:dataguru北京线下沙龙-第二部 <Oracle 索引优化思路--案例分享 -- 刘盛> /微笑]

  2. Oracle索引梳理系列(九)- 浅谈聚簇因子对索引使用的影响及优化方法

    版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...

  3. mysql,oracle数据库优化之索引

    mysql,oracle数据库优化之索引,分库分表,表分区,本地索引,全局索引 数据库引擎 数据库索引 索引类型 主键索引 唯一索引 普通索引 全文索引 位图索引(oracle数据库才有) 在哪些列上 ...

  4. oracle查询慢怎么优化,Oracle查询优化-怎样建立索引优化下面的查询语句啊

    下面是转换出来的查询语句 SELECT * FROM (SELECT "Project1"."C1" AS "C1", "Proj ...

  5. oracle查询性能表关联,通过调节索引 优化Oracle关联查询性能

    本文引用一套实验室信息管理系统(LIS)使用的数据库,假设我们要查询2008年11月做检验的患者记录,条件是大于80岁,姓周的患者,最终结果按检查日期进行倒序排列.要使用的表有三个: ◆lis_rep ...

  6. Oracle学习总结(7)—— 常用的数据库索引优化语句总结

    不管是用C/C++/Java等代码编写的程序,还是SQL编写的数据库脚本,都存在一个持续优化的过程.也就是说,代码优化对于程序员来说,是一个永恒的话题. 近期,我们对之前编写的数据库脚本进行了全面的自 ...

  7. [转载]oracle索引的简单总结

    原文地址:oracle索引的简单总结作者:kindle 一.索引的概念: 数据库的索引类似于书籍的索引.在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息.在数据库中,索引也允许数据库程 ...

  8. ElasticSearch基础杂烩-配置-索引-优化

    2019独角兽企业重金招聘Python工程师标准>>> ElasticSearch基础杂烩-配置-索引-优化 博客分类: java 前言 ElasticSearch是一个基于Luce ...

  9. oracle 语法分析表,Oracle 语句优化分析说明

    Oracle 语句优化分析说明 更新时间:2009年09月17日 21:52:20   作者: Oracle 语句优化技巧,大家可以参考使用,使你的oracle运行效率更高更好. 1. ORACLE ...

  10. mysql维护索引,mysql 索引优化

    Sql代码 CREATE INDEX idx_example ON table1 (col1 ASC, col2 DESC, col3 ASC)CREATE INDEX idx_example ON ...

最新文章

  1. 【Linux系统编程】进程概述和进程号
  2. ADB命令中循环执行某个命令
  3. vs2010找不到服务器,在服务器上找不到Crystal Reports dll部署VS2010应用程序
  4. wsgiserver python 漏洞_python-简单测试wsgi
  5. jQuery blockUI 使用详解
  6. 数据科学----知识树(机器学习、数据挖掘学习思维导图)
  7. 取之盈:微信电脑多开代码、电脑多开微信bat文件
  8. JS打印三角形,菱形,平行四边形.
  9. 安装ie9提示未能完成安装_win7系统32位旗舰版,IE8升级IE9失败,提示未能完成安装...
  10. gas费用测试优化:hardhat-gas-reporter
  11. python 灰度图像素灰度值求和_图像灰度值 灰度值与像素值的关系
  12. WITH AS 子查询
  13. 广东工业大学第12届ACM程序设计大赛 Problem H: tmk买礼物
  14. PotPlayer播放DST音频的mkv电影解码错误
  15. 视频剪辑混剪教程,AI智剪所有视频素材
  16. vCenter Server Appliance(VCSA ) Windows 版本 6.7部署指南
  17. 计算机u盘能直接拨出吗,u盘可以直接从电脑上拔下来吗
  18. 遨博机器人展示_遨博协作机器人全系列二:iV系列智能视觉专用插件无缝对接...
  19. 妙味课堂 - 前端初窥 -
  20. SAT作文模板是把双刃剑

热门文章

  1. matlab信号探测,雷达信号检测matlab程序
  2. 《深度学习技术图像处理入门》看书知识点总结
  3. eclipse下不能编译.ftl文件,会报错的解决方法
  4. Chrome插件开发入门
  5. qt mysql图形界面_qt数据库界面
  6. Vivado 2015.4安装教程(带有效时间至2037年的license)
  7. 十个值得一试的开源深度学习框架
  8. Spring Boot - Mybatis 缓存
  9. fgo最新服务器,FGO服务器故障追加说明 凌晨3点已开服
  10. dp hp oracle 备份软件_HP DP备份软件设置