Commit 2aa2255c authored by monty@donna.mysql.fi's avatar monty@donna.mysql.fi

Improved ANALYZE TABLE a bit for small tables.

parent c36f4fd0
...@@ -20763,6 +20763,9 @@ only partly indexed. @code{NULL} if the entire key is indexed. ...@@ -20763,6 +20763,9 @@ only partly indexed. @code{NULL} if the entire key is indexed.
For now, it tells whether index is FULLTEXT or not. For now, it tells whether index is FULLTEXT or not.
@end multitable @end multitable
Note that as the @code{Cardinality} is counted based on statistics
stored as integers, it's not necessarily accurate for small tables.
@cindex displaying, table status @cindex displaying, table status
@cindex tables, displaying status @cindex tables, displaying status
@cindex status, tables @cindex status, tables
...@@ -23622,7 +23625,7 @@ If you get the following error in the @code{hostname.err log} when ...@@ -23622,7 +23625,7 @@ If you get the following error in the @code{hostname.err log} when
starting @code{mysqld}: starting @code{mysqld}:
@example @example
bdb: Ignoring log file: .../log.XXXXXXXXXX: unsupported log version #} bdb: Ignoring log file: .../log.XXXXXXXXXX: unsupported log version #
@end example @end example
it means that the new @code{BDB} version doesn't support the old log it means that the new @code{BDB} version doesn't support the old log
file format. In this case you have to delete all @code{BDB} log BDB file format. In this case you have to delete all @code{BDB} log BDB
...@@ -42181,6 +42184,10 @@ Fixed wrong define @code{CLIENT_TRANSACTIONS}. ...@@ -42181,6 +42184,10 @@ Fixed wrong define @code{CLIENT_TRANSACTIONS}.
Fixed bug in @code{SHOW VARIABLES} when using INNOBASE tables. Fixed bug in @code{SHOW VARIABLES} when using INNOBASE tables.
@item @item
Setting and using user variables in @code{SELECT DISTINCT} didn't work. Setting and using user variables in @code{SELECT DISTINCT} didn't work.
@item
Tuned @code{SHOW ANALYZE} for small tables.
@item
Fixed handling of arguments in the benchmark script @code{run-all-tests}.
@end itemize @end itemize
@node News-3.23.34a, News-3.23.34, News-3.23.35, News-3.23.x @node News-3.23.34a, News-3.23.34, News-3.23.35, News-3.23.x
...@@ -580,9 +580,7 @@ static int chk_index(MI_CHECK *param, MI_INFO *info, MI_KEYDEF *keyinfo, ...@@ -580,9 +580,7 @@ static int chk_index(MI_CHECK *param, MI_INFO *info, MI_KEYDEF *keyinfo,
} }
if (param->testflag & T_STATISTICS) if (param->testflag & T_STATISTICS)
{ {
if (*keys == 1L) /* first_key */ if (*keys != 1L) /* not first_key */
param->unique_count[keyinfo->keysegs]++;
else
{ {
uint diff; uint diff;
_mi_key_cmp(keyinfo->seg,info->lastkey,key,USE_WHOLE_KEY,SEARCH_FIND, _mi_key_cmp(keyinfo->seg,info->lastkey,key,USE_WHOLE_KEY,SEARCH_FIND,
...@@ -2520,10 +2518,11 @@ static int sort_key_write(SORT_INFO *sort_info, const void *a) ...@@ -2520,10 +2518,11 @@ static int sort_key_write(SORT_INFO *sort_info, const void *a)
{ {
cmp=_mi_key_cmp(sort_info->keyseg,sort_info->key_block->lastkey,(uchar*) a, cmp=_mi_key_cmp(sort_info->keyseg,sort_info->key_block->lastkey,(uchar*) a,
USE_WHOLE_KEY,SEARCH_FIND | SEARCH_UPDATE ,&diff_pos); USE_WHOLE_KEY,SEARCH_FIND | SEARCH_UPDATE ,&diff_pos);
sort_info->unique[diff_pos-1]++;
} }
else else
{ {
cmp= -1; diff_pos=sort_info->keyinfo->keysegs; cmp= -1;
} }
if ((sort_info->keyinfo->flag & HA_NOSAME) && cmp == 0) if ((sort_info->keyinfo->flag & HA_NOSAME) && cmp == 0)
{ {
...@@ -2544,7 +2543,6 @@ static int sort_key_write(SORT_INFO *sort_info, const void *a) ...@@ -2544,7 +2543,6 @@ static int sort_key_write(SORT_INFO *sort_info, const void *a)
_mi_print_key(stdout,sort_info->keyseg,(uchar*) a, USE_WHOLE_KEY); _mi_print_key(stdout,sort_info->keyseg,(uchar*) a, USE_WHOLE_KEY);
return (sort_delete_record(param)); return (sort_delete_record(param));
} }
sort_info->unique[diff_pos-1]++;
#ifndef DBUG_OFF #ifndef DBUG_OFF
if (cmp > 0) if (cmp > 0)
{ {
...@@ -3099,7 +3097,7 @@ static void update_key_parts(MI_KEYDEF *keyinfo, ...@@ -3099,7 +3097,7 @@ static void update_key_parts(MI_KEYDEF *keyinfo,
if (count == 0) if (count == 0)
tmp=records; tmp=records;
else else
tmp= (records+count/2) / count; tmp= (records + (count+1)/2) / (count+1);
if (tmp >= (ulonglong) ~(ulong) 0) if (tmp >= (ulonglong) ~(ulong) 0)
tmp=(ulonglong) ~(ulong) 0; tmp=(ulonglong) ~(ulong) 0;
*rec_per_key_part=(ulong) tmp; *rec_per_key_part=(ulong) tmp;
......
...@@ -23,7 +23,7 @@ c int(11) 0 select,insert,update,references ...@@ -23,7 +23,7 @@ c int(11) 0 select,insert,update,references
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Comment Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Comment
t1 0 PRIMARY 1 a A 4 NULL NULL t1 0 PRIMARY 1 a A 4 NULL NULL
t1 1 b 1 b A 1 NULL NULL t1 1 b 1 b A 1 NULL NULL
t1 1 b 2 c A 2 NULL NULL t1 1 b 2 c A 4 NULL NULL
Table Op Msg_type Msg_text Table Op Msg_type Msg_text
test.t1 check status Table is already up to date test.t1 check status Table is already up to date
Table Op Msg_type Msg_text Table Op Msg_type Msg_text
...@@ -39,7 +39,7 @@ test.t1 check status OK ...@@ -39,7 +39,7 @@ test.t1 check status OK
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Comment Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Comment
t1 0 PRIMARY 1 a A 5 NULL NULL t1 0 PRIMARY 1 a A 5 NULL NULL
t1 1 b 1 b A 1 NULL NULL t1 1 b 1 b A 1 NULL NULL
t1 1 b 2 c A 2 NULL NULL t1 1 b 2 c A 5 NULL NULL
Table Op Msg_type Msg_text Table Op Msg_type Msg_text
test.t1 optimize status OK test.t1 optimize status OK
Table Op Msg_type Msg_text Table Op Msg_type Msg_text
...@@ -53,3 +53,17 @@ mysql ...@@ -53,3 +53,17 @@ mysql
test test
Database (test%) Database (test%)
test test
Table Op Msg_type Msg_text
test.t1 analyze status OK
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Comment
t1 0 PRIMARY 1 f1 A 1 NULL NULL
t1 0 PRIMARY 2 f2 A 3 NULL NULL
t1 0 PRIMARY 3 f3 A 9 NULL NULL
t1 0 PRIMARY 4 f4 A 18 NULL NULL
Table Op Msg_type Msg_text
test.t1 repair status OK
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Comment
t1 0 PRIMARY 1 f1 A 1 NULL NULL
t1 0 PRIMARY 2 f2 A 3 NULL NULL
t1 0 PRIMARY 3 f3 A 9 NULL NULL
t1 0 PRIMARY 4 f4 A 18 NULL NULL
...@@ -13,7 +13,7 @@ lock tables t1 read; ...@@ -13,7 +13,7 @@ lock tables t1 read;
check table t2,t1; check table t2,t1;
show columns from t1; show columns from t1;
show full columns from t1; show full columns from t1;
show keys from t1; show index from t1;
drop table t1,t2; drop table t1,t2;
create table t1 (a int not null primary key, b int not null,c int not null, key(b,c)); create table t1 (a int not null primary key, b int not null,c int not null, key(b,c));
...@@ -25,7 +25,7 @@ insert into t1 values (5,5,5); ...@@ -25,7 +25,7 @@ insert into t1 values (5,5,5);
check table t1 type=changed; check table t1 type=changed;
check table t1 type=medium; check table t1 type=medium;
check table t1 type=extended; check table t1 type=extended;
show keys from t1; show index from t1;
!$1062 insert into t1 values (5,5,5); !$1062 insert into t1 values (5,5,5);
optimize table t1; optimize table t1;
optimize table t1; optimize table t1;
...@@ -37,3 +37,14 @@ show variables like "this_doesn't_exists%"; ...@@ -37,3 +37,14 @@ show variables like "this_doesn't_exists%";
show table status from test like "this_doesn't_exists%"; show table status from test like "this_doesn't_exists%";
show databases; show databases;
show databases like "test%"; show databases like "test%";
#
# Check of show index
#
create table t1 (f1 int not null, f2 int not null, f3 int not null, f4 int not null, primary key(f1,f2,f3,f4));
insert into t1 values (1,1,1,0),(1,1,2,0),(1,1,3,0),(1,2,1,0),(1,2,2,0),(1,2,3,0),(1,3,1,0),(1,3,2,0),(1,3,3,0),(1,1,1,1),(1,1,2,1),(1,1,3,1),(1,2,1,1),(1,2,2,1),(1,2,3,1),(1,3,1,1),(1,3,2,1),(1,3,3,1);
analyze table t1;
show index from t1;
repair table t1;
show index from t1;
drop table t1;
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment