我正面临一个Magento网站的问题,它的1.7版本和我们有良好的服务器配置。
我们正在使用AheadWorks FollowUp扩展,电子邮件日志表包含100K记录,管理网格需要10分钟的时间来加载。
如何使网格加载更快?有什么出路吗?
我们不想删除记录。
除此之外一切都很好。
表结构是:
mysql> desc aw_followup_queue;
+-----------------+-----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+-----------------------+------+-----+---------+----------------+
| id | int(11) unsigned | NO | PRI | NULL | auto_increment |
| code | varchar(128) | NO | | NULL | |
| created_at | datetime | NO | | NULL | |
| scheduled_at | datetime | NO | | NULL | |
| sent_at | datetime | YES | | NULL | |
| sequence_number | smallint(5) unsigned | NO | | 1 | |
| sender_email | varchar(255) | YES | | NULL | |
| sender_name | varchar(255) | YES | | NULL | |
| recipient_name | varchar(255) | NO | | NULL | |
| recipient_email | varchar(255) | NO | | NULL | |
| subject | varchar(255) | YES | | | |
| content | mediumtext | YES | | NULL | |
| status | enum('R','S','F','C') | NO | | R | |
| rule_id | int(11) unsigned | NO | MUL | 0 | |
| object_id | int(11) | NO | | 0 | |
| params | text | YES | | NULL | |
+-----------------+-----------------------+------+-----+---------+----------------+
是否有任何mysql优化将有助于解决此问题?
不是100%肯定这个,但我认为问题是网格中的select all
和unselect all
按钮。
单击“全选”时,不仅会选择网格中显示的项目。选择数据库中的所有项目。为了能够选择所有项目magento在网格的末尾添加一个json对象,其中包含db中所有记录的所有id。
看到这个app/design/adminhtml/default/default/template/widget/grid/massaction.phtml
。
<?php if(!$this->getParentBlock()->canDisplayContainer()): ?>
<script type="text/javascript">
<?php echo $this->getJsObjectName() ?>.setGridIds('<?php echo $this->getGridIdsJson() ?>');
</script>
<?php endif; ?>
该方法getGridIdsJson
是这种情况的罪魁祸首。看看是怎样的Mage_Adminhtml_Block_Widget_Grid_Massaction_Abstract::getGridIdsJson
。
即使它没有加载完整的集合来获取ID(它使用getAllIds
),它仍会在你的情况下加载100k记录。
所以我想删除select all
按钮可能会使你的网格加载更快。
您可以通过_prepareMassaction
在网格块中实现该方法(很可能是已存在的方法)并在其中添加此行来实现此目的:
$this->getMassactionBlock()->setUseSelectAll(false);