• unknown's avatar
    WL#1687 - Optimize UNION DISTINCT ... UNION ALL (again). · 0bc9c4ae
    unknown authored
    HEAP: Copies the key count to a backup variable and sets the key count to zero.
    That way, no HEAP function will ever try to touch any index.
    Re-enabling is done by copying back the backup variable.
    To avoid memory leak at table close, disable deletes all index trees.
    Re-enabling must be done with empty indexes and data anyway. Otherwise,
    the indexes would need to be repaired, wich HEAP is not capable of.
    MyISAM: Only the key_map is cleared and set.
    Re-enabling must be done with empty indexes and data. Otherwise, repair needs
    to be done which will enable all keys persistently.
    The former implementation disabled only non-unique keys and maked this persistent.
    The new implementation additionally can disable all keys, but only without
    making this persistent. Re-enabling all keys can be done without repair,
    if data file and indexes are empty.
    
    
    heap/heapdef.h:
      WL#1687 - Optimize UNION DISTINCT ... UNION ALL (again).
      Pulled hp_clear_keys() out of hp_clear().
    heap/hp_clear.c:
      WL#1687 - Optimize UNION DISTINCT ... UNION ALL (again).
      Pulled hp_clear_keys() out of hp_clear().
      Added the new functions for disabling and enabling keys and to ask for the key state.
    include/heap.h:
      WL#1687 - Optimize UNION DISTINCT ... UNION ALL (again).
      Added a new HP_SHARE element to save the key count while keys are disabled.
      Added declarations for the new functions.
    myisam/mi_open.c:
      WL#1687 - Optimize UNION DISTINCT ... UNION ALL (again).
      Added the new functions for disabling and enabling keys and to ask for the key state.
    myisam/myisamdef.h:
      WL#1687 - Optimize UNION DISTINCT ... UNION ALL (again).
      Added declarations for the new functions.
    sql/ha_heap.cc:
      WL#1687 - Optimize UNION DISTINCT ... UNION ALL (again).
      Pulled set_keys_for_scanning() out of open().
      Added the new functions for disabling and enabling keys and to ask for the key state.
    sql/ha_heap.h:
      WL#1687 - Optimize UNION DISTINCT ... UNION ALL (again).
      Added declarations for the new functions.
    sql/ha_myisam.cc:
      WL#1687 - Optimize UNION DISTINCT ... UNION ALL (again).
      Extended disable_indexes() for all keys and no save.
      The argument is now 'mode' as it must handle different cases.
      Extended enable_indexes() for no save.
      The new feature needs the new argument 'mode' with the same semantics as in disable_indexes().
      Added indexes_are_disabled() to ask for the key state.
      Extended the existing call to enable_indexes() by the new argument.
    sql/ha_myisam.h:
      WL#1687 - Optimize UNION DISTINCT ... UNION ALL (again).
      Modified the declarations of dis-/enable_indexes() for the new argument.
      Added the declaration of the new function to ask for the key state.
    sql/handler.h:
      WL#1687 - Optimize UNION DISTINCT ... UNION ALL (again).
      Added declarations for the operation modes for the key switching functions.
      Modified the declarations of dis-/enable_indexes() for the new argument.
      Added the declaration of the new function to ask for the key state.
    sql/sql_select.cc:
      WL#1687 - Optimize UNION DISTINCT ... UNION ALL (again).
      In create_myisam_from_heap() take notice of disabled keys
      and disable them in the new table before copying the data.
    sql/sql_table.cc:
      WL#1687 - Optimize UNION DISTINCT ... UNION ALL (again).
      Modified the calls of dis-/enable_indexes() for the new argument.
    0bc9c4ae
handler.h 18.8 KB