Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 表连接与子句之间的性能_Performance_Oracle11g - Fatal编程技术网

Performance 表连接与子句之间的性能

Performance 表连接与子句之间的性能,performance,oracle11g,Performance,Oracle11g,我想使用以下查询中的between条件从一个表中获取一列。我加入了这些表,但是如果这些表有10万条记录,这需要很多时间。有没有办法重写这个 我需要一个等级,因为我的价值在a.low和a.high之间。。一个值可以有多个匹配项 选择a.grade,b.val 来自tbl1 a,tbl2b 其中,b.val介于a.low和a.high之间 我也有一个索引(低,高),但Optimizer没有使用它你有什么索引?两个表中是否都有100000行而没有其他谓词?我希望至少在表之间有一些额外的连接谓词。否则,

我想使用以下查询中的between条件从一个表中获取一列。我加入了这些表,但是如果这些表有10万条记录,这需要很多时间。有没有办法重写这个

我需要一个等级,因为我的价值在a.low和a.high之间。。一个值可以有多个匹配项

选择a.grade,b.val 来自tbl1 a,tbl2b 其中,b.val介于a.low和a.high之间


我也有一个索引(低,高),但Optimizer没有使用它

你有什么索引?两个表中是否都有100000行而没有其他谓词?我希望至少在表之间有一些额外的连接谓词。否则,您将尝试将b中的100000条记录与a中的100000条范围(100000*100000=1000000000或100亿次比较)进行比较。如果这就是您想要做的,我敢打赌您的数据模型有一个根本性的问题。我在表a的“低”和“高”列上都有索引,但计划显示它没有被使用。具体来说,我在tblA中有大约180000条记录,在tblB中有120000条记录。没有要加入的预测,这就是数据模型现在的情况。尝试检查任何其他优化方法。您能解释一下
tblA
tblB
代表什么吗?如果你有180000个间隔,我假设你有很多重叠的间隔。因此,如果在
tblB
中有120000行,那么每行将获得数百或数千个匹配项吗?那么你的查询最终会得到数亿个结果?我很难想出一个合乎逻辑的情况。是的,有重叠的时间间隔,这使得过程成本高昂。一个tbl具有IP地址列表,另一个tbl具有子网信息,并且在这些tbl中构建了一个现有逻辑,以查看每个IP属于哪个子网。这些数据来自网络数据库,数据模型是以这种方式建立的,因此只需尝试使用现有的数据。我们正在努力改变模型本身,这将需要几周的时间,但与此同时,该查询在之前运行了30-40分钟,突然运行了5-6小时并超时。数据量是相同的。这就是分析的原因