J'ai une table mysql avec plus de 4 millions de données; Eh bien, le problème est que certaines requêtes fonctionnent et d'autres pas dépend du terme de recherche, si le terme de recherche a un grand volume de données dans le tableau que je reçois l'erreur suivante:Grande table mysql avec Zend Framework
Fatal error: Allowed memory size of 1048576000 bytes exhausted (tried to allocate 75 bytes) in /home/****/public_html/Zend/Db/Statement/Pdo.php on line 290
J'ai actuellement Zend Framework cache pour les métadonnées activées, j'ai un index sur tous les champs de cette table. Le site est en cours d'exécution sur un serveur dédié avec 2 Go de RAM.
J'ai également défini la limite de mémoire sur: ini_set ("memory_limit", "1000M");
D'autres choses que je peux optimiser?
Ce sont les types de requête que je suis actuellement en utilisant:
$do = $this->select()
->where('branche LIKE ?','%'.mysql_escape_string($branche).'%')
->order('premium DESC');
}
//For name
if(empty($branche) && empty($plz))
{
$do = $this->select("MATCH(`name`) AGAINST ('{$theString}') AS score")
->where('MATCH(`name`) AGAINST(? IN BOOLEAN MODE)', $theString)
->order('premium DESC, score');
}
et quelques autres, mais ils sont à peu près les mêmes.
Cordialement
// LE
Zend_Paginator CODE
$d = $firmen->doSearch($finalType,$theKeyword,$thePLZ,$theBranche,false,false,false,$theOrder);
if ($d !== false) {
$paginator = Zend_Paginator::factory($d);
$paginator->setItemCountPerPage(5)
->setPageRange(10)
->setCurrentPageNumber($pag);
$this->view->data = $paginator;
// MYSQL résultats EXPLAIN
mysql> EXPLAIN select * from `wirtscha_ksw`.`firmen` WHERE `name` LIKE '%gmbh%';ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 32911
Current database: *** NONE ***
+----+-------------+--------+------+---------------+------+---------+------+---------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------+------+---------------+------+---------+------+---------+-------------+
| 1 | SIMPLE | firmen | ALL | NULL | NULL | NULL | NULL | 3749155 | Using where |
+----+-------------+--------+------+---------------+------+---------+------+---------+- ------------+
1 row in set (0.03 sec
vous ne devriez pas avoir besoin d'un index sur chaque colonne de la table, avez-vous essayé un EXPLAIN sur la requête générée? – robjmills
J'ai également ajouté les résultats des tests EXPLIAN, pouvez-vous m'aider à améliorer? – Uffo