【发布时间】:2023-04-04 03:06:01
【问题描述】:
我有一个超过 400 万条数据的 mysql 表;问题是,有些查询可以工作,有些不可以,这取决于搜索词,如果搜索词在表中的数据量很大,我会收到以下错误:
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 内存的专用服务器上运行。
我还将内存限制设置为: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 代码
$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 解释结果
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
【问题讨论】:
-
您不应该对表中的每一列都使用索引,您是否尝试过对生成的查询进行解释?
-
我还添加了EXPLIAN测试结果,你能帮我改进一下吗?
标签: php mysql zend-framework