mirror of
https://github.com/MariaDB/server.git
synced 2026-05-07 15:45:33 +02:00
Fix for Bug#3904 "COUNT DISTINCT performance anomaly in 4.1"
The bug was caused by error in hash calculation function: it always returned hash value for last field in a composite key, so for keys like (a text, b char(1)) we were always getting bad hash values. myisam/mi_unique.c: Fix for bug #3904: We should take into account existing hash value when calculating hash for next key in a composite unique index.
This commit is contained in:
parent
350ad5003e
commit
f468b91f37
1 changed files with 3 additions and 3 deletions
|
|
@ -71,6 +71,7 @@ ha_checksum mi_unique_hash(MI_UNIQUEDEF *def, const byte *record)
|
|||
const byte *pos, *end;
|
||||
ha_checksum crc=0;
|
||||
HA_KEYSEG *keyseg;
|
||||
ulong seed= 4;
|
||||
|
||||
for (keyseg=def->seg ; keyseg < def->end ; keyseg++)
|
||||
{
|
||||
|
|
@ -108,9 +109,8 @@ ha_checksum mi_unique_hash(MI_UNIQUEDEF *def, const byte *record)
|
|||
end= pos+length;
|
||||
if (type == HA_KEYTYPE_TEXT || type == HA_KEYTYPE_VARTEXT)
|
||||
{
|
||||
ulong nr=1, nr2=4;
|
||||
keyseg->charset->coll->hash_sort(keyseg->charset,(const uchar*)pos,length,&nr, &nr2);
|
||||
crc=nr;
|
||||
keyseg->charset->coll->hash_sort(keyseg->charset,
|
||||
(const uchar*) pos, length, &crc, &seed);
|
||||
}
|
||||
else
|
||||
while (pos != end)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue