mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
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.
This commit is contained in:
@ -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
|
||||
@ -91,6 +91,13 @@
|
||||
#define HA_KEY_READ_ONLY 64 /* Support HA_EXTRA_KEYREAD */
|
||||
|
||||
|
||||
/* operations for disable/enable indexes */
|
||||
#define HA_KEY_SWITCH_NONUNIQ 0
|
||||
#define HA_KEY_SWITCH_ALL 1
|
||||
#define HA_KEY_SWITCH_NONUNIQ_SAVE 2
|
||||
#define HA_KEY_SWITCH_ALL_SAVE 3
|
||||
|
||||
|
||||
/*
|
||||
Bits in index_ddl_flags(KEY *wanted_index)
|
||||
for what ddl you can do with index
|
||||
@ -371,8 +378,9 @@ public:
|
||||
*/
|
||||
virtual int restore(THD* thd, HA_CHECK_OPT* check_opt);
|
||||
virtual int dump(THD* thd, int fd = -1) { return ER_DUMP_NOT_IMPLEMENTED; }
|
||||
virtual int disable_indexes(bool all, bool save) { return HA_ERR_WRONG_COMMAND; }
|
||||
virtual int enable_indexes() { return HA_ERR_WRONG_COMMAND; }
|
||||
virtual int disable_indexes(uint mode) { return HA_ERR_WRONG_COMMAND; }
|
||||
virtual int enable_indexes(uint mode) { return HA_ERR_WRONG_COMMAND; }
|
||||
virtual int indexes_are_disabled(void) {return 0;}
|
||||
virtual void start_bulk_insert(ha_rows rows) {}
|
||||
virtual int end_bulk_insert() {return 0; }
|
||||
virtual int discard_or_import_tablespace(my_bool discard) {return -1;}
|
||||
|
Reference in New Issue
Block a user