diff options
author | Igor Babaev <igor@askmonty.org> | 2012-05-22 20:55:07 -0700 |
---|---|---|
committer | Igor Babaev <igor@askmonty.org> | 2012-05-22 20:55:07 -0700 |
commit | 055477ae522b805d3b2e890af9fe520cc1e3290d (patch) | |
tree | 6f45830161e7fa5f2a690046fc6f118f9331b3b2 /sql/sql_statistics.cc | |
parent | 2a1afc29f252fb189f6e93a2e0d3a1939f8220d5 (diff) | |
download | mariadb-git-055477ae522b805d3b2e890af9fe520cc1e3290d.tar.gz |
Support of the extended syntax for ANALYZE.
Diffstat (limited to 'sql/sql_statistics.cc')
-rw-r--r-- | sql/sql_statistics.cc | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/sql/sql_statistics.cc b/sql/sql_statistics.cc index 44f25115f00..aeaecf537cb 100644 --- a/sql/sql_statistics.cc +++ b/sql/sql_statistics.cc @@ -1289,6 +1289,8 @@ int collect_statistics_for_table(THD *thd, TABLE *table) { table_field= *field_ptr; uint max_heap_table_size= thd->variables.max_heap_table_size; + if (!bitmap_is_set(table->read_set, table_field->field_index)) + continue; set_nulls_for_write_column_stat_values(table_field); table_field->nulls= 0; table_field->column_total_length= 0; @@ -1306,8 +1308,6 @@ int collect_statistics_for_table(THD *thd, TABLE *table) table_field->count_distinct= NULL; } - bitmap_set_all(table->read_set); - /* Perform a full table scan to collect statistics on 'table's columns */ if (!(rc= file->ha_rnd_init(TRUE))) { @@ -1319,6 +1319,8 @@ int collect_statistics_for_table(THD *thd, TABLE *table) for (field_ptr= table->field; *field_ptr; field_ptr++) { table_field= *field_ptr; + if (!bitmap_is_set(table->read_set, table_field->field_index)) + continue; if (table_field->is_null()) table_field->nulls++; else @@ -1357,6 +1359,8 @@ int collect_statistics_for_table(THD *thd, TABLE *table) for (field_ptr= table->field; *field_ptr; field_ptr++) { table_field= *field_ptr; + if (!bitmap_is_set(table->read_set, table_field->field_index)) + continue; table_field->write_stat.nulls_ratio= (double) table_field->nulls/rows; table_field->write_stat.avg_length= (double) table_field->column_total_length / (rows-table_field->nulls); @@ -1380,12 +1384,13 @@ int collect_statistics_for_table(THD *thd, TABLE *table) if (!rc) { - uint keys= table->s->keys ; - + uint key; + key_map::Iterator it(table->keys_in_use_for_query); + /* Collect statistics for indexes */ - for (uint i= 0; i < keys; i++) + while ((key= it++) != key_map::Iterator::BITMAP_END) { - if ((rc= collect_statistics_for_index(table, i))) + if ((rc= collect_statistics_for_index(table, key))) break; } } @@ -1439,7 +1444,6 @@ int update_statistics_for_table(THD *thd, TABLE *table) int err; int rc= 0; TABLE *stat_table; - uint keys= table->s->keys; DBUG_ENTER("update_statistics_for_table"); @@ -1466,6 +1470,8 @@ int update_statistics_for_table(THD *thd, TABLE *table) for (Field **field_ptr= table->field; *field_ptr; field_ptr++) { Field *table_field= *field_ptr; + if (!bitmap_is_set(table->read_set, table_field->field_index)) + continue; restore_record(stat_table, s->default_values); column_stat.set_key_fields(table_field); err= column_stat.update_stat(); @@ -1475,12 +1481,13 @@ int update_statistics_for_table(THD *thd, TABLE *table) /* Update the statistical table index_stat */ stat_table= tables[INDEX_STAT].table; + uint key; + key_map::Iterator it(table->keys_in_use_for_query); Index_stat index_stat(stat_table, table); - KEY *key_info, *key_info_end; - for (key_info= table->key_info, key_info_end= table->key_info+keys; - key_info < key_info_end; key_info++) + while ((key= it++) != key_map::Iterator::BITMAP_END) { + KEY *key_info= table->key_info+key; uint key_parts= table->actual_n_key_parts(key_info); for (i= 0; i < key_parts; i++) { |