我有一个表Blah(纬度float,经度float,create_time date,owner_id int,…..)

我的代码只能执行一次查询

select *

from Blah

where latitude < l1 and latitude > l2

and longitude < ll1 and longitude > ll2

and create_time < t1 and create_time > t2

and owner_id < o1 and owner_id > o2 ;

(当然,值l1,l2,… o1,o2是来自程序的动态参数)

我的问题是我应该创建什么样的索引?综合指数?

在复合指数的情况下,我应该先列哪一列?

指数有多好?

我想了很久,没有找到关于oracle索引如何工作的详细文档.

我可以使用B-tree找到使用B-tree实现的文档,在我们的例子中:B树中的每个键都是一个4元组:(column1,column2,column3,column4),其中这些元组的排序关系被定义为词法订购.

那么对于上面的查询,假设我们的订单是(owner_id,create_time,纬度,经度),我猜

oracle首先需要二进制搜索到点(o1,t1,l1,ll1),对于这个操作,索引确实是有用的.

但接下来,我们需要找到第一个中间件的终点:我们需要找到(o1,t1,l1,ll2),这也可以通过二进制搜索来完成.

接下来,我们需要找到满足条件的下一节,所以我们需要

find(o1,t1,lx,ll1)其中lx是大于l1的下一个值,我们可以通过二进制搜索找到这个.

但在我们的情况下,很可能在同一个纬度上,可能不超过1个经度,

所以这里二进制搜索不比线性扫描更有效.

按照这种精神,看来我们应该把列的数值范围基数放在第一位,

在这种情况下,create_time,如果我们的分数仅在几天内创建.

如果我们从来没有做过范围条件,而只是等于(=)条件,那么第一列是什么呢?

为了更清楚,这里有一个更简单的例子:

假设我有2列X和Y

在db中,两者的值都是[1,2,… 100],所以我们有100×100行

我的查询是

select * from mytable where X > 34 and X < 78 and Y > 12 and Y < 15;

说我们的索引是(X,Y),所以两个值之间的比较规则是

v1 < v2 <=====> v1.x < v2.x || v1.x == v2.x && v1.y < v2.y

给定上述排序规则,我们可以看到索引中的值是

连续排列(x,y的值):

1,1, 1,2 1,3 .... 1,100

2,1 2,2 2,3 ......2,100

.....

100,1 100,2 ....... 100,100

现在,要查询查询中的值,需要B-Tree遍历

定位(78-34-1)间隔,因此(78-34-1)* 2查找(1开始

一个用于结束位置),而不仅仅是2个查找.

所以如果我们具有更高的维度,则间隔数量呈指数增长

与维数,所以索引可能不再有用了——

这是我的关注

非常感谢

oracle条件索引查询,Oracle复合索引用于范围查询条件相关推荐

  1. SQL Server创建复合索引时,复合索引列顺序对查询的性能影响

    SQL Server创建复合索引时,复合索引列顺序对查询的性能影响 原文:SQL Server创建复合索引时,复合索引列顺序对查询的性能影响 说说复合索引 写索引的博客太多了,一直不想动手写,有一下两 ...

  2. oracle复合索引列顺序,复合索引顺序选择性问题(一)

    索引是我们经常选择的数据表检索优化方案之一.其中,复合索引是我们经常选择的策略.那么,构建索引列的顺序上,有何种差异和需要注意的方面呢?下面我们通过实验来进行说明. 实验环境说明 准备数据表和实验环境 ...

  3. php复合索引,多列复合索引的使用绕过微软sqlserver的一个缺陷

    多列复合索引的使用绕过微软sqlserver的一个缺陷 作者:小涵 | 来源:互联网 | 2018-07-15 16:35 阅读: 4292 多列复合索引是指由多个字段组成的索引.这种情况相当常用的, ...

  4. mysql中复合索引语法_MySQL 复合索引

    MySQL 复合索引 简介:在本例中,您将了解MySQL组合索引以及如何使用它来加速查询. MySQL复合索引简介 复合索引是多列的索引.MySQL允许您创建一个最多包含16列的复合索引. 复合索引也 ...

  5. MySQL联合索引原理_复合索引_组合索引_多列索引

    文章目录 联合索引原理示意图 联合索引就是复合索引.组合索引.多列索引. 联合索引原理示意图

  6. mysql 复合索引 in,MySQL复合索引比主键索引还快,为什么?

    存储引擎:innodb 题目如下: create table t( id primary, ver int, content varchar(3000), intro varchar(3000) ) ...

  7. oracle联合主键 索引,关于复合主键查询时使用索引研究

    当数据库创建表时,每个表只能有一个主键,但是如果想让多个列都成为主键时,就要用到复合主键. 一.主键唯一约束 我们知道当某列为主键时,Oracle会自动将此列创建唯一约束.也就是说不允许有相同的值出现 ...

  8. oracle查询两列合并成一列_MySQL复合索引和单列索引的单表查询分析

    本文由读者小平同志投稿,小平是一位非常朴实认真的猿,现于某上市证券公司做微服务开发,对 MySQL 优化有深入研究,小平的博客地址是https://blog.csdn.net/weixin_41193 ...

  9. oracle中创建复合索引方法

    索引可以包含一个.两个或更多个列.两个或更多个列上的索引被称作复合索引.例如,以下语句创建一个具有两列的复合索引: CREATE INDEX name      ON employee (emp_ln ...

  10. MySQL复合索引 in查询,mysql 联合索引 in查询是否生效

    这篇文章主要讲的是使用in查询,联合索引是否会生效的问题 首先简单说一下联合索引:联合索引又叫复合索引,是由表中的几个列联合组成的索引.联合索引生效需满足最左前缀原则,即如果联合索引列为a,b,c三列 ...

最新文章

  1. VC6.0 DLL项目与WINDOWS项目的转换
  2. 标记注解 java_【java】细说 JAVA中 标注 注解(annotation)
  3. yelee主题中的Busuanzi网站统计失效问题
  4. HDU3930(离散对数与原根)
  5. spring import resource 文件后bean找不到问题解决
  6. 嗅探TFTP配置文件传输
  7. [HADOOP问题] 常见问题解决
  8. 微信网页开发之授权登录(java实现)
  9. 天翼网关密码忘记(猫密码忘记)
  10. 必读的20本投资经典
  11. 程序员业余时间修炼指南
  12. 【2021-07-23】JS逆向之雷速体育canvas渲染数据解密
  13. 中国大学mooc慕课python答案_中国大学MOOC(慕课)Python编程基础答案
  14. 订单管理系统(OMS)搭建实战 - 低代码拖拽定制订单管理系统
  15. H2O机器学习框架的学习
  16. 使用ColorMatrix简单处理色彩平衡
  17. Joda - 日期时间
  18. ATF:Gicv源码文件系列-gic_common.h
  19. linux运行同花顺,wine打不开同花顺软件
  20. 互联网寒冬来袭,面对裁员和竞争的双重压力,程序员该何去何从?

热门文章

  1. 软件测试面试两个月,我是如何进入奇虎360?面试总结分享给大家
  2. Word 通过尾注插入参考文献
  3. 如何让PHP性能问题不再饱受诟病
  4. 电池SOC估计-EKF UKF
  5. 2022金属非金属矿山(露天矿山)安全管理人员考试练习题模拟考试平台操作
  6. 有道云笔记快捷键大全+修改
  7. 时间序列的特征工程——针对Hurst指数的Python计算
  8. 电视剧《都挺好》弹幕数据分析
  9. java实现消息推送_java实现后台服务器消息推送
  10. 随机效应估算与固定效应估算_短面板数据学习手册(固定效应与随机效应等汇总)...