php - 优化数据库查询 MySQL 和 PHP

标签 php mysql magento magento-1.9

我想知道是否可以修改我的 PHP 代码,使其对数据库的处理更加轻量?此代码在 cronjob 中每分钟运行一次。

希望确保这对数据库的影响尽可能小。

<?php
ini_set('memory_limit', '128M');
define('MAGENTO_ROOT', getcwd());
//exit;

$time     = time();
$time2    = $time - 0;
$to       = date('Y-m-d H:i:s', $time2);
$lastTime = $time - 60; //orders from the past X seconds
$from     = date('Y-m-d H:i:s', $lastTime);
$curDate  = date('Y-m-d');

$mageFilename = '/app/Mage.php';
require_once $mageFilename;
Mage::app();

$order_collection = Mage::getResourceModel('sales/order_collection');
$order_collection->addAttributeToSelect('*')->addAttributeToFilter('updated_at', array(
    'from' => $from,
    'to' => $to
))->getSelect();

print count($order_collection);
foreach ($order_collection->getItems() as $order) {
    $cards = Mage::getModel('giftcards/giftcards')->getCollection()->addFieldToFilter('order_id', $order->getId());
    print count($cards);
    foreach ($cards as $card) {
        if ($card->getCardStatus() == 0) {        
            if ((($card->getMailDeliveryDate() == null) || ($curDate == $card->getMailDeliveryDate())) && $card->getCardType() != 'offline') {
                $card->setCardStatus(1);
                $card->save();
                $card->send();
            }
        } elseif (($card->getCardStatus() == 1) && ($curDate < $card->getMailDeliveryDate())) {
            $card->setCardStatus(0);
            $card->save();
        }
    }
}
?>

最佳答案

您需要立即优化的唯一事情是获取礼品卡的方式:您正在获取order_collections,并且您正在迭代这些项目并获取相关数据;这被称为 N=1 issue .

我不确定 Magento 到底是如何工作的(我很确定他们有一些您可以使用的 join 功能),但是您需要预先获取您需要的所有内容,然后循环遍历结果并按照您想要的方式格式化数据。

关于php - 优化数据库查询 MySQL 和 PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48097280/

相关文章:

php - 如何在 MySQL 中存储工作日列表?

php - 如何更改 MySQL 查询的结果排序?

php - 使用 Ajax 更新的最佳方法

连接中同一字段的 MySQL 多个 Where 条件

php - 向 Magento Web 服务 API 添加过滤器

Magento:如何在产品页面中获取制造商名称?

PHP 7 - 比较匿名类实例

php - 如何保护 wp-content 文件夹?

python - 在 python tornado 的 web 请求处理程序中,是否应该设置 mysql 的全局连接?

Magento - 将可配置的产品选项附加费添加到分级定价中