mirror of
https://github.com/MariaDB/server.git
synced 2026-05-07 15:45:33 +02:00
LP1008334 : Speedup specific datetime queries that got slower with introduction of microseconds in 5.3
- Item::get_seconds() now skips decimal arithmetic, if decimals is 0. This significantly speeds up from_unixtime() if no fractional part is passed. - replace sprintfs used to format temporal values by hand-coded formatting Query1 (original query in the bug report) BENCHMARK(10000000,DATE_SUB(FROM_UNIXTIME(RAND() * 2147483648), INTERVAL (FLOOR(1 + RAND() * 365)) DAY)) Query2 (Variation of query1 that does not use fractional part in FROM_UNIXTIME parameter) BENCHMARK(10000000,DATE_SUB(FROM_UNIXTIME(FLOOR(RAND() * 2147483648)), INTERVAL (FLOOR(1 + RAND() * 365)) DAY)) Prior to the patch, the runtimes were (32 bit compilation/AMD machine) Query1: 41.53 sec Query2: 23.90 sec With the patch, the runtimes are Query1: 32.32 sec (speed up due to removing sprintf) Query2: 12.06 sec (speed up due to skipping decimal arithmetic)
This commit is contained in:
parent
e326a3893f
commit
afe1ef5e3a
2 changed files with 81 additions and 18 deletions
|
|
@ -1190,7 +1190,7 @@ err:
|
|||
|
||||
bool Item::get_seconds(ulonglong *sec, ulong *sec_part)
|
||||
{
|
||||
if (result_type() == INT_RESULT)
|
||||
if (decimals == 0)
|
||||
{ // optimize for an important special case
|
||||
longlong val= val_int();
|
||||
bool neg= val < 0 && !unsigned_flag;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue