magento如果表包含超过100K的记录,如何使网格加载更快?

我正面临一个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 allunselect 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);

相关文章

0 0 投票数
文章评分
订阅评论
提醒
0 评论
内联反馈
查看所有评论