最小化Zend中的查询

时间:2010-10-26 10:27:46

标签: zend-framework mysql

我想知道两种算法之间的第一件事,哪一种更好

从table1.id = table2.table1_id;

中的tabel1内连接table2中选择table1。*

然后提取或

从table2中选择*;

然后使用foreach循环

从table1中选择* table1.id = table2.table1_id

*请告诉我一个似是而非的理由

现在我正在使用zend,我相信第一个比第二个更快更好(我不知道为什么......只是一些偏见)

并且在zend db profiler中,每次我都会收到 查询:DESCRIBE menu_items时间:0.00084590911865234

有没有办法减少它?

请告诉我如何使用zend组件在zend中连接两个表

的问候,

1 个答案:

答案 0 :(得分:1)

由于查询响应时间的原因,使用内连接比php循环更快。在第一个中,您将只执行一个查询,而在第二个中查询。数据库准备检索数据,这意味着通过不同的查询手动连接表格要快得多。

要与zend一起加入,你需要这个(假设你在Zend_Db_Table上):

$select = $this->select()->setIntegrityCheck(false);
$select->from(array('t1'=>'table1'))
       ->join(array('t2'=>'table2'),'t2.table1_id =t1.id','*')
       ->where('t1.deleted =?',0) 
       ->group('t1.id')
       ->order('t1.date DESC')
       ->limit(4);
$result = $this->fetchAll($select);

要防止DESCRIBE查询,您可以对表结构进行硬编码或对其进行缓存。点击这里:

http://framework.zend.com/manual/en/performance.database.html