code_junkie

Optimising a SELECT query that runs slow on Oracle which runs quickly on SQL Server

Nov 11th, 2011
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.36 KB | None | 0 0
  1. SELECT orderID FROM tasks WHERE orderID NOT IN
  2. (SELECT DISTINCT orderID FROM tasks WHERE
  3. engineer1 IS NOT NULL AND engineer2 IS NOT NULL)
  4.  
  5. SELECT DISTINCT orderID FROM tasks WHERE
  6. engineer1 IS NOT NULL AND engineer2 IS NOT NULL
  7.  
  8. ANALYZE TABLE tasks COMPUTE STATISTICS;
  9.  
  10. ANALYZE TABLE tasks COMPUTE STATISTICS;
  11.  
  12. SELECT orderID FROM tasks WHERE orderID NOT EXISTS
  13. (SELECT DISTINCT orderID FROM tasks WHERE
  14. engineer1 IS NOT NULL AND engineer2 IS NOT NULL)`print("code sample");`
  15.  
  16. SELECT orderID AS oid FROM tasks WHERE NOT EXISTS
  17. (SELECT DISTINCT orderID AS oid2 FROM tasks WHERE
  18. engineer1 IS NOT NULL AND engineer2 IS NOT NULL and oid=oid2)
  19.  
  20. select orderid from tasks
  21. minus
  22. select orderid from tasks
  23. where engineer1 IS NOT NULL AND engineer2 IS NOT NULL
  24.  
  25. select orderid from ORDERS
  26. minus
  27. select orderid from tasks
  28. where engineer1 IS NOT NULL AND engineer2 IS NOT NULL
  29.  
  30. select orderid from ORDERS
  31. where orderid not in
  32. ( select orderid from tasks
  33. where engineer1 IS NOT NULL AND engineer2 IS NOT NULL
  34. )
  35.  
  36. select orderid from ORDERS
  37. where not exists
  38. ( select null from tasks
  39. where tasks.orderid = orders.orderid
  40. and engineer1 IS NOT NULL OR engineer2 IS NOT NULL
  41. )
  42.  
  43. SELECT
  44. t.orderID
  45. FROM
  46. tasks t
  47. LEFT JOIN tasks t1
  48. ON t.orderID = t1.orderID
  49. AND t1.engineer1 IS NOT NULL
  50. AND t1.engineer2 IS NOT NULL
  51. WHERE
  52. t1.orderID IS NULL
  53.  
  54. SELECT orderID FROM orders WHERE orderID NOT IN
  55. (SELECT DISTINCT orderID FROM tasks WHERE
  56. engineer1 IS NOT NULL AND engineer2 IS NOT NULL)
  57.  
  58. SELECT
  59. o.orderID
  60. FROM
  61. orders o
  62. LEFT JOIN tasks t
  63. ON o.orderID = t.orderID
  64. AND t.engineer1 IS NOT NULL
  65. AND t.engineer2 IS NOT NULL
  66. WHERE
  67. t.orderID IS NULL
  68.  
  69. SELECT t1.orderID
  70. FROM tasks t1
  71. WHERE NOT EXISTS
  72. (SELECT 1
  73. FROM tasks t2
  74. WHERE t2.orderID = t1.orderID
  75. AND t2.engineer1 IS NOT NULL
  76. AND t2.engineer2 IS NOT NULL)
  77.  
  78. SELECT orderID FROM tasks
  79. WHERE engineer1 IS NOT NULL OR engineer2 IS NOT NULL
  80.  
  81. SELECT DISTINCT orderID FROM tasks t1 WHERE NOT EXISTS (SELECT * FROM tasks t2 WHERE t2.orderID=t1.orderID AND (engineer1 IS NOT NULL OR engineer2 IS NOT NULL));
  82.  
  83. SELECT orderID FROM tasks
  84. MINUS
  85. SELECT DISTINCT orderID FROM tasks WHERE engineer1 IS NOT NULL
  86. AND engineer2 IS NOT NULL
  87.  
  88. SELECT orderID FROM tasks
  89. MINUS
  90. SELECT DISTINCT orderID FROM tasks WHERE
  91. engineer1 IS NOT NULL AND engineer2 IS NOT NULL
  92.  
  93. select distinct orderid
  94. from
  95. (
  96. select orderid,
  97. max(case when engineer1 is null and engineer2 is null then 0 else 1)
  98. over (partition by orderid)
  99. as max_null_finder
  100. from tasks
  101. )
  102. where max_null_finder = 0
  103.  
  104. SELECT orderID
  105. FROM tasks
  106. GROUP BY orderID
  107. HAVING COUNT(engineer1) = 0 AND COUNT(engineer2) = 0
  108.  
  109. SELECT DISTINCT orderID FROM Tasks
  110. WHERE Engineer1 IS NULL OR Engineer2 IS NULL;
  111.  
  112. SELECT orderID
  113. FROM tasks
  114. WHERE orderID NOT IN (
  115. SELECT DISTINCT orderID
  116. FROM tasks
  117. WHERE engineer1 IS NOT NULL AND engineer2 IS NOT NULL
  118. )
  119. ;
  120.  
  121. SELECT DISTINCT orderID
  122. FROM tasks
  123. WHERE NOT ( engineer1 IS NOT NULL AND engineer2 IS NOT NULL )
  124. ;
  125.  
  126. SELECT DISTINCT orderID
  127. FROM tasks
  128. WHERE engineer1 IS NULL OR engineer2 IS NULL
  129. ;
  130.  
  131. SELECT DISTINCT orderID
  132. FROM tasks
  133. WHERE (engineer1 IS NULL OR engineer2 IS NULL)
  134.  
  135. SELECT orderID
  136. FROM tasks
  137. GROUP BY orderID
  138. HAVING COUNT(engineer1) = 0 OR COUNT(engineer2) = 0
Add Comment
Please, Sign In to add comment