forked frompostgres/postgres
- Notifications
You must be signed in to change notification settings - Fork6
Commit3e4b346
committed
Improve planner's ability to recognize cases where an IN's RHS is unique.
If the right-hand side of a semijoin is unique, then we can treat it like anormal join (or another way to say that is: we don't need to explicitlyunique-ify the data before doing it as a normal join). We were recognizingsuch cases when the RHS was a sub-query with appropriate DISTINCT or GROUPBY decoration, but there's another way: if the RHS is a plain relation withunique indexes, we can check if any of the indexes prove the output isunique. Most of the infrastructure for that was there already in the joinremoval code, though I had to rearrange it a bit. Per reflection about arecent example in pgsql-performance.1 parent360429e commit3e4b346
File tree
4 files changed
+134
-49
lines changed- src
- backend/optimizer
- path
- plan
- util
- include/optimizer
4 files changed
+134
-49
lines changedOriginal file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
2253 | 2253 |
| |
2254 | 2254 |
| |
2255 | 2255 |
| |
2256 |
| - | |
2257 |
| - | |
2258 |
| - | |
2259 |
| - | |
2260 |
| - | |
2261 |
| - | |
| 2256 | + | |
| 2257 | + | |
| 2258 | + | |
| 2259 | + | |
| 2260 | + | |
| 2261 | + | |
| 2262 | + | |
| 2263 | + | |
| 2264 | + | |
| 2265 | + | |
| 2266 | + | |
| 2267 | + | |
| 2268 | + | |
| 2269 | + | |
| 2270 | + | |
2262 | 2271 |
| |
2263 | 2272 |
| |
2264 | 2273 |
| |
2265 |
| - | |
| 2274 | + | |
| 2275 | + | |
2266 | 2276 |
| |
2267 | 2277 |
| |
2268 | 2278 |
| |
| 2279 | + | |
| 2280 | + | |
| 2281 | + | |
| 2282 | + | |
| 2283 | + | |
| 2284 | + | |
| 2285 | + | |
| 2286 | + | |
| 2287 | + | |
| 2288 | + | |
| 2289 | + | |
| 2290 | + | |
| 2291 | + | |
| 2292 | + | |
| 2293 | + | |
| 2294 | + | |
| 2295 | + | |
| 2296 | + | |
| 2297 | + | |
| 2298 | + | |
| 2299 | + | |
| 2300 | + | |
| 2301 | + | |
| 2302 | + | |
| 2303 | + | |
| 2304 | + | |
| 2305 | + | |
| 2306 | + | |
| 2307 | + | |
| 2308 | + | |
| 2309 | + | |
| 2310 | + | |
| 2311 | + | |
| 2312 | + | |
| 2313 | + | |
| 2314 | + | |
| 2315 | + | |
| 2316 | + | |
| 2317 | + | |
| 2318 | + | |
| 2319 | + | |
| 2320 | + | |
| 2321 | + | |
2269 | 2322 |
| |
2270 |
| - | |
| 2323 | + | |
2271 | 2324 |
| |
2272 | 2325 |
| |
2273 | 2326 |
| |
| |||
2285 | 2338 |
| |
2286 | 2339 |
| |
2287 | 2340 |
| |
2288 |
| - | |
2289 |
| - | |
| 2341 | + | |
| 2342 | + | |
2290 | 2343 |
| |
2291 | 2344 |
| |
2292 | 2345 |
| |
| 2346 | + | |
2293 | 2347 |
| |
| 2348 | + | |
2294 | 2349 |
| |
2295 | 2350 |
| |
2296 | 2351 |
| |
| |||
2319 | 2374 |
| |
2320 | 2375 |
| |
2321 | 2376 |
| |
2322 |
| - | |
| 2377 | + | |
| 2378 | + | |
| 2379 | + | |
| 2380 | + | |
| 2381 | + | |
| 2382 | + | |
| 2383 | + | |
| 2384 | + | |
| 2385 | + | |
| 2386 | + | |
| 2387 | + | |
| 2388 | + | |
| 2389 | + | |
| 2390 | + | |
| 2391 | + | |
| 2392 | + | |
| 2393 | + | |
| 2394 | + | |
| 2395 | + | |
| 2396 | + | |
| 2397 | + | |
| 2398 | + | |
| 2399 | + | |
| 2400 | + | |
| 2401 | + | |
| 2402 | + | |
| 2403 | + | |
| 2404 | + | |
| 2405 | + | |
| 2406 | + | |
| 2407 | + | |
| 2408 | + | |
| 2409 | + | |
| 2410 | + | |
| 2411 | + | |
| 2412 | + | |
2323 | 2413 |
| |
2324 | 2414 |
| |
2325 |
| - | |
| 2415 | + | |
2326 | 2416 |
| |
2327 | 2417 |
| |
2328 | 2418 |
| |
|
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
264 | 264 |
| |
265 | 265 |
| |
266 | 266 |
| |
267 |
| - | |
268 |
| - | |
269 |
| - | |
270 |
| - | |
271 |
| - | |
272 |
| - | |
273 |
| - | |
274 |
| - | |
275 |
| - | |
276 |
| - | |
277 |
| - | |
278 |
| - | |
279 |
| - | |
280 |
| - | |
281 |
| - | |
282 |
| - | |
283 |
| - | |
284 |
| - | |
285 |
| - | |
286 |
| - | |
287 |
| - | |
288 |
| - | |
289 |
| - | |
290 |
| - | |
291 |
| - | |
292 |
| - | |
293 |
| - | |
294 |
| - | |
295 |
| - | |
296 |
| - | |
297 |
| - | |
298 |
| - | |
299 |
| - | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
300 | 271 |
| |
301 | 272 |
| |
302 |
| - | |
| 273 | + | |
303 | 274 |
| |
304 | 275 |
| |
305 | 276 |
| |
|
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
1021 | 1021 |
| |
1022 | 1022 |
| |
1023 | 1023 |
| |
1024 |
| - | |
1025 |
| - | |
| 1024 | + | |
| 1025 | + | |
1026 | 1026 |
| |
1027 | 1027 |
| |
1028 | 1028 |
| |
1029 | 1029 |
| |
1030 | 1030 |
| |
1031 | 1031 |
| |
1032 | 1032 |
| |
| 1033 | + | |
| 1034 | + | |
| 1035 | + | |
| 1036 | + | |
| 1037 | + | |
| 1038 | + | |
| 1039 | + | |
| 1040 | + | |
| 1041 | + | |
| 1042 | + | |
| 1043 | + | |
| 1044 | + | |
| 1045 | + | |
| 1046 | + | |
| 1047 | + | |
| 1048 | + | |
| 1049 | + | |
| 1050 | + | |
| 1051 | + | |
| 1052 | + | |
| 1053 | + | |
| 1054 | + | |
| 1055 | + | |
1033 | 1056 |
| |
1034 | 1057 |
| |
1035 | 1058 |
| |
|
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
50 | 50 |
| |
51 | 51 |
| |
52 | 52 |
| |
53 |
| - | |
| 53 | + | |
| 54 | + | |
54 | 55 |
| |
55 | 56 |
| |
56 | 57 |
| |
|
0 commit comments
Comments
(0)