Đin*_*hâu 20 sql oracle performance
我正在开发一个处理Oracle数据库中许多数据的应用程序.
在某些情况下,我必须根据给定的条件列表获得许多对象,并且我使用SELECT ...FROM.. WHERE... IN...,但IN表达式只接受一个大小最多为1,000个项目的列表.  
所以我使用OR表达式,但正如我观察到的那样 - 也许这个查询(使用OR)比IN(使用相同的条件列表)慢.这样对吗?如果是这样,如何提高查询速度?  
OMG*_*ies 27
IN最好是OR- OR是一个出了名的糟糕的表演者,并且可能导致在复杂查询中需要使用括号的其他问题.
比任何一个IN或更好的选项OR是加入包含您想要(或不想要)的值的表.此表可用于比较,临时或已存在于模式中.  
在这种情况下,我会这样做:
这意味着您可以将排序保留到数据库并编写简单查询.
无论如何,Oracle 在内部将 IN 列表转换为 OR 列表,因此实际上应该没有性能差异。唯一的区别是 Oracle 必须转换 IN,但如果您自己提供 OR,则需要解析更长的字符串。
这是您测试的方法。
CREATE TABLE my_test (id NUMBER);
SELECT 1 
FROM my_test
WHERE id IN (1,2,3,4,5,6,7,8,9,10,
             21,22,23,24,25,26,27,28,29,30,
             31,32,33,34,35,36,37,38,39,40,
             41,42,43,44,45,46,47,48,49,50,
             51,52,53,54,55,56,57,58,59,60,
             61,62,63,64,65,66,67,68,69,70,
             71,72,73,74,75,76,77,78,79,80,
             81,82,83,84,85,86,87,88,89,90,
             91,92,93,94,95,96,97,98,99,100
             );
SELECT sql_text, hash_value
FROM v$sql 
WHERE sql_text LIKE '%my_test%';
SELECT operation, options, filter_predicates
FROM v$sql_plan
WHERE hash_value = '1181594990'; -- hash_value from previous query
选择语句
表访问已满(“ID”=1 或“ID”=2 或“ID”=3 或“ID”=4 或“ID”=5 或“ID”=6 或“ID”=7 或“ID”= 8 OR “ID”=9 OR “ID”=10 OR “ID”=21 OR “ID”=22 OR “ID”=23 OR “ID”=24 OR “ID”=25 OR “ID”=26 OR "ID"=27 OR "ID"=28 OR "ID"=29 OR "ID"=30 OR "ID"=31 OR "ID"=32 OR "ID"=33 OR "ID"=34 OR "ID "=35 OR "ID"=36 OR "ID"=37 OR "ID"=38 OR "ID"=39 OR "ID"=40 OR "ID"=41 OR "ID"=42 OR "ID"= 43 OR “ID”=44 OR “ID”=45 OR “ID”=46 OR “ID”=47 OR “ID”=48 OR “ID”=49 OR “ID"=50 OR "ID"=51 OR "ID"=52 OR "ID"=53 OR "ID"=54 OR "ID"=55 OR "ID"=56 OR "ID"=57 OR "ID" =58 OR “ID”=59 OR “ID”=60 OR “ID”=61 OR “ID”=62 OR “ID”=63 OR “ID”=64 OR “ID”=65 OR “ID”=66 OR "ID"=67 OR "ID"=68 OR "ID"=69 OR "ID"=70 OR "ID"=71 OR "ID"=72 OR "ID"=73 OR "ID"=74 OR " ID"=75 OR "ID"=76 OR "ID"=77 OR "ID"=78 OR "ID"=79 OR "ID"=80 OR "ID"=81 OR "ID"=82 OR "ID" =83 OR "ID"=84 OR "ID"=85 OR "ID"=86 OR "ID"=87 OR "ID"=88 OR "ID"=89 OR "ID"=90 OR "ID"=91 OR "ID"=92 OR "ID"=93 OR "ID"=94 OR "ID"=95 OR "ID"=96 OR "ID"=97 OR "ID" =98 或“ID”=99 或“ID”=100)
| 归档时间: | 
 | 
| 查看次数: | 30396 次 | 
| 最近记录: |