Oznámení
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í