Closed jeancz closed 11 years ago
Vrátil jsem to zpátky. Vyjmenované sloupce jsou samozřejmě lepší/rychlejší než *
.
Problém je, ale v něčem jiném. Když se volá $this->selection->count(); bez parametrů, tak se v libs\nette\nette\Nette\Database\Table\Selection.php provede tento kód:
/**
* Counts number of rows.
* @param string if it is not provided returns count of result rows, otherwise runs new sql counting query
* @return int
*/
public function count($column = NULL)
{
if (!$column) {
$this->execute();
return count($this->data);
}
return $this->aggregation("COUNT($column)");
}
a jak můžeš vidět, tak se count zjiští tím nejméně efektivním způsobem. Vrátí se všechny řádky do pole a nad nimi se v php použije funkce count().
Proto je fajn tam dát buď sloupec s primárním klíčem nebo indexem a nebo prostě '*' a mysql to vyhodnotí samo.
Při zjišťování počtu záznamů, si zbytečně grida nechává vracet všechny záznamy, díky špatnému volání getCount() ve tříde NetteDatabase.php.
Správně by mělo být: