mirror of
https://github.com/MariaDB/server.git
synced 2026-05-15 03:17:20 +02:00
BUG#20725 MySQLD cluster use "fast count" is broken
Post recent handler changes, fast count(*) for cluster was broken. Seeing as we maintain an exact count for ndb, we can easily use this for an optimisation. With this patch, and use_exact_count DISABLED, we will use the fast way of getting count(*) but not use the exact count for the optimiser. With this patch and use_exact_count ENABLED, we will use the fast way of getting count(*) and use the exact count for the optimiser. sql/ha_ndbcluster.cc: Implement handler::records() and set appropriate handler flag. sql/ha_ndbcluster.h: we implment handler::records() for fast count(*)
This commit is contained in:
parent
725ab9df20
commit
9512629598
2 changed files with 27 additions and 1 deletions
|
|
@ -414,6 +414,30 @@ void ha_ndbcluster::set_rec_per_key()
|
|||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
ha_rows ha_ndbcluster::records()
|
||||
{
|
||||
ha_rows retval;
|
||||
DBUG_ENTER("ha_ndbcluster::records");
|
||||
struct Ndb_local_table_statistics *info= m_table_info;
|
||||
DBUG_PRINT("info", ("id=%d, no_uncommitted_rows_count=%d",
|
||||
((const NDBTAB *)m_table)->getTableId(),
|
||||
info->no_uncommitted_rows_count));
|
||||
|
||||
Ndb *ndb= get_ndb();
|
||||
ndb->setDatabaseName(m_dbname);
|
||||
struct Ndb_statistics stat;
|
||||
if (ndb_get_table_statistics(ndb, m_table, &stat) == 0)
|
||||
{
|
||||
retval= stat.row_count;
|
||||
}
|
||||
|
||||
THD *thd= current_thd;
|
||||
if (get_thd_ndb(thd)->error)
|
||||
info->no_uncommitted_rows_count= 0;
|
||||
|
||||
DBUG_RETURN(retval + info->no_uncommitted_rows_count);
|
||||
}
|
||||
|
||||
void ha_ndbcluster::records_update()
|
||||
{
|
||||
if (m_ha_not_exact_count)
|
||||
|
|
@ -5455,7 +5479,8 @@ void ha_ndbcluster::get_auto_increment(ulonglong offset, ulonglong increment,
|
|||
HA_PRIMARY_KEY_REQUIRED_FOR_POSITION | \
|
||||
HA_PRIMARY_KEY_REQUIRED_FOR_DELETE | \
|
||||
HA_PARTIAL_COLUMN_READ | \
|
||||
HA_HAS_OWN_BINLOGGING
|
||||
HA_HAS_OWN_BINLOGGING | \
|
||||
HA_HAS_RECORDS
|
||||
|
||||
ha_ndbcluster::ha_ndbcluster(TABLE_SHARE *table_arg):
|
||||
handler(&ndbcluster_hton, table_arg),
|
||||
|
|
|
|||
|
|
@ -622,6 +622,7 @@ class ha_ndbcluster: public handler
|
|||
int read_multi_range_next(KEY_MULTI_RANGE **found_range_p);
|
||||
|
||||
bool get_error_message(int error, String *buf);
|
||||
ha_rows records();
|
||||
void info(uint);
|
||||
void get_dynamic_partition_info(PARTITION_INFO *stat_info, uint part_id);
|
||||
int extra(enum ha_extra_function operation);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue