tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

Omlouváme se, provoz fóra byl ukončen

Neefektivni DibiDataSource::getTotalCount() pri velkem poctu zaznamu

před 10 lety

honza.trtik
Člen | 11

Zdravim,
resime problem s neefektivnosti dotazu vygenerovanem metodou DibiDataSource::getTotalCount():

<?php

    public function getTotalCount()
    {
        if ($this->totalCount === NULL) {
            $this->totalCount = (int) $this->connection->nativeQuery(
                'SELECT COUNT(*) FROM ' . $this->sql
            )->fetchSingle();
        }
        return $this->totalCount;
    }

?>

Pri velkem poctu radku je dotaz typu SELECT COUNT(*) FROM (SELECT ...) radove pomalejsi nez proste SELECT COUNT(*) FROM [table].
Bylo by fajn mit moznost objektu predat vlastni sql pro zjisteni celkoveho poctu zaznamu. Podedit tridu DibiDataSource ale nejde, protoze je pevne zadratovana napr. v kodu DibiConnection, wrapper (new TotalCountDataSource($dibiDataSource, $args ...)) nad tridou take nelze udelat, kvuli deklaraci metod getConnection a __toString jako final…

před 10 lety

David Grudl
Nette Core | 6806

Je to neefektivni i v posledni verzi MySQL (napr. řady 5.1)?

před 10 lety

David Grudl
Nette Core | 6806

Zkoušel jsem to a k mému velkému údivu MySQL skutečně neumí použít indexy z subquery. Pokusím se najít nějaké řešení

před 10 lety

honza.trtik
Člen | 11

Pro dalsi info viz toto nove vlakno .