[HN Gopher] How Postgres Chooses Which Index to Use for a Query ___________________________________________________________________ How Postgres Chooses Which Index to Use for a Query Author : tosh Score : 46 points Date : 2022-04-21 21:37 UTC (1 hours ago) (HTM) web link (pganalyze.com) (TXT) w3m dump (pganalyze.com) | qeternity wrote: | Postgres really really needs index hints. | gleenn wrote: | Is there a good reason they haven't added them? Difficult to | implement? | gfody wrote: | seems to be a matter of principle with the (some?) core devs | position that it adds complexity and shouldn't be necessary. | I remember the big debate long ago that resulted in postgres | rejecting the standard sql merge command in favor of a | proprietary syntax for upserting despite the common practice | of using merge w/hints for doing upserts in most other | engines - iirc it boiled down to postgres devs do not want | hints, ever. | luhn wrote: | > Poor application code maintainability: hints in queries | require massive refactoring. | | > Interference with upgrades: today's helpful hints become | anti-performance after an upgrade. | | > Encouraging bad DBA habits slap a hint on instead of | figuring out the real issue. Does not scale with data size: | the hint that's right when a table is small is likely to be | wrong when it gets larger. | | > Failure to actually improve query performance: most of the | time, the optimizer is actually right. | | > Interfering with improving the query planner: people who | use hints seldom report the query problem to the project. | | https://wiki.postgresql.org/wiki/OptimizerHintsDiscussion | alyandon wrote: | There is no optimizer that is capable of getting the | correct result 100% of the time. Even Oracle with decades | of costly engineering behind it requires query tuning | (either vs explicit hints on the client side sql or via | server side plan tuning) at any reasonably large scale. | | I respect the Postgreql core dev team's adherence to | principles but in this particular case I believe they are | just inventing arguments to justify their unreasonable | stance against allowing query hinting. | dspillett wrote: | I know nothing of why postgres don't want to implement them, | but coming from the MS SQL Server side of things I can tell | you they are quite an effective foot gun in a number of | circumstances. More often, in fact, than they are a benefit. | | Often people reach for index hints when they should be fixing | issues in the query or the available indexes, swapping a scan | for many seeks which on small data does give a benefit but | once code goes into production and the data grows performance | falls through the floor. Also if they are named in the hint | then you open up a new family of errors if the index gets | altered later (though you could perhaps implement the hint as | "use an index on columns x & y" rather than "use this | specific named index" to get around this). | | There are circumstances where they are a genuinely useful | tool, of course, but not as many and people seem to think. | | Beyond that I assume implementation will have difficult | points. If the hints are taken as instructions it may require | significant changes to the rest of the generated query plan, | if they are sometimes ignored then people will complain | bitterly... | password4321 wrote: | I agree, and viraptor came to my rescue recently: | | https://news.ycombinator.com/item?id=31067059#31068194 | | > _There 's also an extension if you want just the hints: | https://pghintplan.osdn.jp/pg_hint_plan.html _ ___________________________________________________________________ (page generated 2022-04-21 23:00 UTC)