Commit d7153c5
committed
Fix best_inner_indexscan to return both the cheapest-total-cost and
cheapest-startup-cost innerjoin indexscans, and make joinpath.c consider
both of these (when different) as the inside of a nestloop join. The
original design was based on the assumption that indexscan paths always
have negligible startup cost, and so total cost is the only important
figure of merit; an assumption that's obviously broken by bitmap
indexscans. This oversight could lead to choosing poor plans in cases
where fast-start behavior is more important than total cost, such as
LIMIT and IN queries. 8.1-vintage brain fade exposed by an example from
Chuck D.1 parent 2415ad9 commit d7153c5
File tree
5 files changed
+94
-63
lines changed- src
- backend
- nodes
- optimizer/path
- include
- nodes
- optimizer
5 files changed
+94
-63
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
11 | | - | |
| 11 | + | |
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
| |||
1440 | 1440 | | |
1441 | 1441 | | |
1442 | 1442 | | |
1443 | | - | |
| 1443 | + | |
| 1444 | + | |
1444 | 1445 | | |
1445 | 1446 | | |
1446 | 1447 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
12 | | - | |
| 12 | + | |
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
| |||
1599 | 1599 | | |
1600 | 1600 | | |
1601 | 1601 | | |
1602 | | - | |
| 1602 | + | |
1603 | 1603 | | |
1604 | | - | |
1605 | 1604 | | |
1606 | | - | |
1607 | | - | |
1608 | | - | |
1609 | | - | |
1610 | | - | |
1611 | | - | |
| 1605 | + | |
| 1606 | + | |
| 1607 | + | |
| 1608 | + | |
| 1609 | + | |
| 1610 | + | |
| 1611 | + | |
1612 | 1612 | | |
1613 | 1613 | | |
1614 | | - | |
| 1614 | + | |
1615 | 1615 | | |
1616 | | - | |
| 1616 | + | |
1617 | 1617 | | |
1618 | | - | |
| 1618 | + | |
| 1619 | + | |
1619 | 1620 | | |
1620 | 1621 | | |
1621 | | - | |
1622 | 1622 | | |
1623 | 1623 | | |
1624 | 1624 | | |
| |||
1627 | 1627 | | |
1628 | 1628 | | |
1629 | 1629 | | |
| 1630 | + | |
| 1631 | + | |
| 1632 | + | |
1630 | 1633 | | |
1631 | 1634 | | |
1632 | 1635 | | |
| |||
1641 | 1644 | | |
1642 | 1645 | | |
1643 | 1646 | | |
1644 | | - | |
| 1647 | + | |
1645 | 1648 | | |
1646 | 1649 | | |
1647 | 1650 | | |
1648 | 1651 | | |
1649 | 1652 | | |
1650 | 1653 | | |
1651 | | - | |
| 1654 | + | |
1652 | 1655 | | |
1653 | 1656 | | |
1654 | 1657 | | |
| |||
1668 | 1671 | | |
1669 | 1672 | | |
1670 | 1673 | | |
1671 | | - | |
| 1674 | + | |
1672 | 1675 | | |
1673 | 1676 | | |
1674 | 1677 | | |
1675 | 1678 | | |
1676 | 1679 | | |
1677 | 1680 | | |
1678 | | - | |
| 1681 | + | |
1679 | 1682 | | |
1680 | 1683 | | |
1681 | | - | |
| 1684 | + | |
1682 | 1685 | | |
1683 | 1686 | | |
1684 | 1687 | | |
| |||
1692 | 1695 | | |
1693 | 1696 | | |
1694 | 1697 | | |
1695 | | - | |
| 1698 | + | |
| 1699 | + | |
| 1700 | + | |
1696 | 1701 | | |
1697 | 1702 | | |
1698 | 1703 | | |
| |||
1755 | 1760 | | |
1756 | 1761 | | |
1757 | 1762 | | |
1758 | | - | |
| 1763 | + | |
1759 | 1764 | | |
1760 | | - | |
1761 | | - | |
| 1765 | + | |
1762 | 1766 | | |
1763 | | - | |
| 1767 | + | |
| 1768 | + | |
| 1769 | + | |
| 1770 | + | |
| 1771 | + | |
1764 | 1772 | | |
1765 | | - | |
1766 | | - | |
1767 | | - | |
| 1773 | + | |
| 1774 | + | |
| 1775 | + | |
| 1776 | + | |
| 1777 | + | |
1768 | 1778 | | |
1769 | 1779 | | |
1770 | | - | |
| 1780 | + | |
1771 | 1781 | | |
1772 | 1782 | | |
1773 | 1783 | | |
1774 | | - | |
| 1784 | + | |
| 1785 | + | |
1775 | 1786 | | |
1776 | 1787 | | |
1777 | 1788 | | |
1778 | | - | |
1779 | | - | |
1780 | 1789 | | |
1781 | 1790 | | |
1782 | 1791 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
11 | | - | |
| 11 | + | |
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
| |||
286 | 286 | | |
287 | 287 | | |
288 | 288 | | |
289 | | - | |
| 289 | + | |
290 | 290 | | |
291 | | - | |
292 | | - | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
293 | 294 | | |
294 | 295 | | |
295 | 296 | | |
| |||
325 | 326 | | |
326 | 327 | | |
327 | 328 | | |
328 | | - | |
| 329 | + | |
| 330 | + | |
329 | 331 | | |
330 | 332 | | |
331 | 333 | | |
| |||
383 | 385 | | |
384 | 386 | | |
385 | 387 | | |
386 | | - | |
387 | | - | |
| 388 | + | |
| 389 | + | |
388 | 390 | | |
389 | 391 | | |
390 | 392 | | |
391 | 393 | | |
392 | | - | |
393 | | - | |
| 394 | + | |
| 395 | + | |
| 396 | + | |
| 397 | + | |
394 | 398 | | |
395 | | - | |
396 | | - | |
| 399 | + | |
| 400 | + | |
| 401 | + | |
397 | 402 | | |
398 | 403 | | |
399 | 404 | | |
| |||
435 | 440 | | |
436 | 441 | | |
437 | 442 | | |
438 | | - | |
439 | | - | |
| 443 | + | |
| 444 | + | |
440 | 445 | | |
441 | 446 | | |
442 | 447 | | |
| |||
464 | 469 | | |
465 | 470 | | |
466 | 471 | | |
467 | | - | |
| 472 | + | |
468 | 473 | | |
469 | 474 | | |
470 | 475 | | |
471 | 476 | | |
472 | 477 | | |
473 | | - | |
| 478 | + | |
| 479 | + | |
| 480 | + | |
| 481 | + | |
| 482 | + | |
| 483 | + | |
| 484 | + | |
| 485 | + | |
| 486 | + | |
| 487 | + | |
| 488 | + | |
474 | 489 | | |
475 | 490 | | |
476 | 491 | | |
| |||
789 | 804 | | |
790 | 805 | | |
791 | 806 | | |
| 807 | + | |
| 808 | + | |
| 809 | + | |
792 | 810 | | |
793 | 811 | | |
794 | 812 | | |
| |||
804 | 822 | | |
805 | 823 | | |
806 | 824 | | |
807 | | - | |
| 825 | + | |
| 826 | + | |
808 | 827 | | |
809 | 828 | | |
810 | 829 | | |
| |||
824 | 843 | | |
825 | 844 | | |
826 | 845 | | |
827 | | - | |
| 846 | + | |
828 | 847 | | |
829 | | - | |
830 | | - | |
| 848 | + | |
| 849 | + | |
831 | 850 | | |
832 | 851 | | |
833 | 852 | | |
834 | 853 | | |
835 | 854 | | |
836 | 855 | | |
837 | 856 | | |
838 | | - | |
| 857 | + | |
839 | 858 | | |
840 | 859 | | |
841 | | - | |
| 860 | + | |
842 | 861 | | |
843 | | - | |
| 862 | + | |
844 | 863 | | |
845 | 864 | | |
846 | 865 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
10 | | - | |
| 10 | + | |
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
| |||
996 | 996 | | |
997 | 997 | | |
998 | 998 | | |
999 | | - | |
| 999 | + | |
1000 | 1000 | | |
1001 | 1001 | | |
1002 | 1002 | | |
1003 | 1003 | | |
1004 | 1004 | | |
1005 | | - | |
| 1005 | + | |
1006 | 1006 | | |
1007 | 1007 | | |
1008 | 1008 | | |
1009 | 1009 | | |
1010 | 1010 | | |
1011 | 1011 | | |
1012 | | - | |
| 1012 | + | |
1013 | 1013 | | |
1014 | 1014 | | |
1015 | 1015 | | |
| |||
1018 | 1018 | | |
1019 | 1019 | | |
1020 | 1020 | | |
1021 | | - | |
1022 | | - | |
| 1021 | + | |
| 1022 | + | |
| 1023 | + | |
1023 | 1024 | | |
1024 | 1025 | | |
1025 | 1026 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
10 | | - | |
| 10 | + | |
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
| |||
45 | 45 | | |
46 | 46 | | |
47 | 47 | | |
48 | | - | |
49 | | - | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
50 | 51 | | |
51 | 52 | | |
52 | 53 | | |
| |||
0 commit comments