• Sergei Petrunia's avatar
    MDEV-6657: Poor plan choice for ORDER BY key DESC optimization... · c945233a
    Sergei Petrunia authored
    The problem was caused by the following scenario:
    - range optimizer picks an index IDX1 which doesn't match the ORDER BY ...
      LIMIT clause.
    - test_if_skip_sort_order() decides to switch to index IDX2 which matches
      the ORDER BY ... LIMIT.
    - it runs SQL_SELECT::test_quick_select() for the second time to produce
      an quick select for IDX2.
    - However, test_quick_select() would figure that full index scan on IDX1
      is still cheaper (its calculations ignore the LIMIT n).
    
    Fixed this by
    - passing force_quick_range=true to test_quick_select()
    - in test_quick_select, don't consider full index scans if the mentioned
      parameter is true.
    
    Numerous changes in .result files are caused by test_quick_select() being
    run after "early/late NULLs filtering" feature has injected NOT NULL
    condition.
    c945233a
subselect_no_opts.result 242 KB