From c36bdf1c889539413d5369ae628aff97d044b276 Mon Sep 17 00:00:00 2001 From: Michael Widenius Date: Fri, 23 Mar 2012 18:22:39 +0200 Subject: Speedup: - Don't call update_virtual_fields() if table->vfield is not set - Don't prealloc memory for in open_tables() as this is very seldom used. sql/records.cc: Don't call update_virtual_fields() if table->vfield is not set sql/sql_base.cc: Don't prealloc memory for in open_tables() as this is very seldom used. Don't call update_virtual_fields() if table->vfield is not set sql/sql_delete.cc: Don't call update_virtual_fields() if table->vfield is not set sql/sql_handler.cc: Don't call update_virtual_fields() if table->vfield is not set sql/sql_join_cache.cc: Don't call update_virtual_fields() if table->vfield is not set Move some frequent values to local variables sql/sql_table.cc: Don't call update_virtual_fields() if table->vfield is not set sql/sql_update.cc: Don't call update_virtual_fields() if table->vfield is not set sql/table.cc: Assert if update_virtual_fields is called with wrong parameters --- sql/sql_join_cache.cc | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) (limited to 'sql/sql_join_cache.cc') diff --git a/sql/sql_join_cache.cc b/sql/sql_join_cache.cc index a960c63e782..d49be2e446c 100644 --- a/sql/sql_join_cache.cc +++ b/sql/sql_join_cache.cc @@ -3344,23 +3344,26 @@ int JOIN_TAB_SCAN::next() int skip_rc; READ_RECORD *info= &join_tab->read_record; SQL_SELECT *select= join_tab->cache_select; + TABLE *table= join_tab->table; + THD *thd= join->thd; + if (is_first_record) is_first_record= FALSE; else err= info->read_record(info); - if (!err) - update_virtual_fields(join->thd, join_tab->table); - while (!err && select && (skip_rc= select->skip_record(join->thd)) <= 0) + if (!err && table->vfield) + update_virtual_fields(thd, table); + while (!err && select && (skip_rc= select->skip_record(thd)) <= 0) { - if (join->thd->killed || skip_rc < 0) + if (thd->killed || skip_rc < 0) return 1; /* Move to the next record if the last retrieved record does not meet the condition pushed to the table join_tab. */ err= info->read_record(info); - if (!err) - update_virtual_fields(join->thd, join_tab->table); + if (!err && table->vfield) + update_virtual_fields(thd, table); } return err; } @@ -3874,7 +3877,8 @@ int JOIN_TAB_SCAN_MRR::next() */ DBUG_ASSERT(cache->buff <= (uchar *) (*ptr) && (uchar *) (*ptr) <= cache->end_pos); - update_virtual_fields(join->thd, join_tab->table); + if (join_tab->table->vfield) + update_virtual_fields(join->thd, join_tab->table); } return rc; } -- cgit v1.2.1