From bfe2425aadc92071392cc339229270f563a22216 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 6 May 2004 15:53:01 +0200 Subject: 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. --- sql/sql_table.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'sql/sql_table.cc') diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 0d0be1b7e10..fd980f90468 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -1,4 +1,4 @@ -/* Copyright (C) 2000-2003 MySQL AB +/* Copyright (C) 2000-2004 MySQL 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 @@ -2556,14 +2556,14 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name, VOID(pthread_mutex_lock(&LOCK_open)); wait_while_table_is_used(thd, table, HA_EXTRA_FORCE_REOPEN); VOID(pthread_mutex_unlock(&LOCK_open)); - error= table->file->enable_indexes(); + error= table->file->enable_indexes(HA_KEY_SWITCH_NONUNIQ_SAVE); /* COND_refresh will be signaled in close_thread_tables() */ break; case DISABLE: VOID(pthread_mutex_lock(&LOCK_open)); wait_while_table_is_used(thd, table, HA_EXTRA_FORCE_REOPEN); VOID(pthread_mutex_unlock(&LOCK_open)); - error=table->file->disable_indexes(0, 1); + error=table->file->disable_indexes(HA_KEY_SWITCH_NONUNIQ_SAVE); /* COND_refresh will be signaled in close_thread_tables() */ break; } -- cgit v1.2.1