diff options
author | unknown <ingo@mysql.com> | 2004-05-06 15:53:01 +0200 |
---|---|---|
committer | unknown <ingo@mysql.com> | 2004-05-06 15:53:01 +0200 |
commit | 0bc9c4ae8d2471fc95e6da87ca62c5c062e5df08 (patch) | |
tree | 7facff5ed1695a7cdb0e0ab674137605074739d9 /sql/ha_heap.h | |
parent | 30be794283ce245ba8ac4bc4c38f561764335cb8 (diff) | |
download | mariadb-git-0bc9c4ae8d2471fc95e6da87ca62c5c062e5df08.tar.gz |
WL#1687 - Optimize UNION DISTINCT ... UNION ALL (again).
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.
Diffstat (limited to 'sql/ha_heap.h')
-rw-r--r-- | sql/ha_heap.h | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/sql/ha_heap.h b/sql/ha_heap.h index 68406202c76..2f849d2574b 100644 --- a/sql/ha_heap.h +++ b/sql/ha_heap.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB +/* Copyright (C) 2000,2004 MySQL AB & MySQL Finland AB & TCX DataKonsult AB This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -61,6 +61,7 @@ class ha_heap: public handler int open(const char *name, int mode, uint test_if_locked); int close(void); + void set_keys_for_scanning(void); int write_row(byte * buf); int update_row(const byte * old_data, byte * new_data); int delete_row(const byte * buf); @@ -82,6 +83,9 @@ class ha_heap: public handler int extra(enum ha_extra_function operation); int external_lock(THD *thd, int lock_type); int delete_all_rows(void); + int disable_indexes(uint mode); + int enable_indexes(uint mode); + int indexes_are_disabled(void); ha_rows records_in_range(int inx, const byte *start_key,uint start_key_len, enum ha_rkey_function start_search_flag, const byte *end_key,uint end_key_len, |