summaryrefslogtreecommitdiff
path: root/sql/table.h
diff options
context:
space:
mode:
authorunknown <dlenev@brandersnatch.localdomain>2004-03-28 04:11:54 +0400
committerunknown <dlenev@brandersnatch.localdomain>2004-03-28 04:11:54 +0400
commitf6a8ec5f925ec7d37d2858c5799b7a91a95accca (patch)
treec5035ed539732100b50eb469c056b49a572c70d4 /sql/table.h
parent2f74974b05a3f7469c0faebea9a157839dc0e4a6 (diff)
downloadmariadb-git-f6a8ec5f925ec7d37d2858c5799b7a91a95accca.tar.gz
"Fix" for BUG #2050 "10 to 1 performance drop with server 4.1.1".
Actually it is not a bug but right behavior observed as pefomance degradation after we have forced Item_field::fix_fields() to re-execute each time when we are executing prep stmt. This patch implements small optimization which heals this bad behavior. We are caching field position in TABLE::field array in Item's member and are using this position for speeding up field lookups in fix_fields() in case of its re-execution. sql/item.cc: Added cached_field_index member to Item_ident for caching field position in TABLE::field array for quicker field lookup in case fix_fields() is executed twice. sql/item.h: Added cached_field_index member to Item_ident for caching field position in TABLE::field array for quicker field lookup in case fix_fields() is executed twice. sql/mysql_priv.h: Now find_field_in_table has one more in-out parameter which is used for caching field index in TABLE::field array stored for quicker field look up. sql/sql_acl.cc: Now find_field_in_table has one more in-out parameter which is used for caching field index in TABLE::field array stored for quicker field look up. sql/sql_base.cc: Optimization: Now when we are looking up Field by its name we are caching its position in TABLE::field array in Item_ident::cached_field_index, so when we will call fix_fields() second time for this item (e.g. when we are re-executing prep statement) we can reuse this index to speed up this lookup. sql/table.cc: Now we storing in TABLE::name_hash pointers to elements of TABLE::field array, because this allows easily retrieve index of field in this array when it is looked up by its name. sql/table.h: Added comment claryfying what we store in TABLE::name_hash. BitKeeper/etc/logging_ok: Logging to logging@openlogging.org accepted
Diffstat (limited to 'sql/table.h')
-rw-r--r--sql/table.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/sql/table.h b/sql/table.h
index c027e2ccc44..039e3ded9f3 100644
--- a/sql/table.h
+++ b/sql/table.h
@@ -65,7 +65,8 @@ struct st_table {
handler *file;
Field **field; /* Pointer to fields */
Field_blob **blob_field; /* Pointer to blob fields */
- HASH name_hash; /* hash of field names */
+ /* hash of field names (contains pointers to elements of field array) */
+ HASH name_hash;
byte *record[2]; /* Pointer to records */
byte *default_values; /* Default values for INSERT */
byte *insert_values; /* used by INSERT ... UPDATE */