我有一個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