- Notifications
You must be signed in to change notification settings - Fork28
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 changed| Original 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)