我有一个MySQL表超过400万的数据;还有的问题是,一些查询工作,有的没有这取决于搜索词,当检索词有数据的比我得到以下错误的桌上有一大音量:巨大的MySQL表与Zend框架
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
我现在有启用了元数据的Zend Framework缓存,我从该表的所有字段都有索引。该站点运行在具有2gb ram的专用服务器上。我还设置了内存限制:ini_set(“memory_limit”,“1000M”);
我可以优化的其他任何东西?
这些是我目前使用的查询类型:
$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');
}
和其他几个,但都是大同小异的。
问候
// 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 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
您不应该在表中的每一列都需要一个索引,您是否尝试过对生成的查询进行EXPLAIN? – robjmills 2010-05-30 21:14:44
我也添加了EXPLIAN测试结果,你能帮助我改进吗? – Uffo 2010-05-31 11:17:05