如何向表视图MySQL添加索引

时间:2019-06-13 03:22:22

标签: mysql database

我对数据库性能有问题,因为所建立的查询中的联接太多。我主动创建了一个表格视图,以使过程变得比以前更快,代码如下所示

CREATE VIEW dashboard_sales AS (
    SELECT o.order_id,
           o.order_date,
           o.order_status,
           o.order_gender,
           o.order_birth_date,
           op.op_status,
           op.op_payment_code,
           oi.oi_qty,
           op.op_total,
           oi.item_id,
           i.item_name,
           dc.dc_id,
           dc.dc_name,
           dc.dc_sales,
           c.id_city,
           c.name_city,
           pc.pc_caption
    FROM `order` o 
    LEFT JOIN order_items oi
    ON o.order_id = oi.order_id
    LEFT JOIN order_payment op
    ON o.order_id = op.order_id
    LEFT JOIN item i
    ON oi.item_id = i.item_id
    LEFT JOIN distribution_channel dc
    ON o.dc_id = dc.dc_id
    LEFT JOIN city c
    ON o.order_city = c.id_city
    LEFT JOIN payment_channel pc
    ON op.op_payment_code = pc.pc_code
);

但是因为有很多记录,并且我正在寻找一种通过添加如下所示的索引的解决方案,

CREATE INDEX MyIndex
ON dashboard_sales(op_total, order_date)

但是我遇到这样的错误,

#1347 - 'matoa_admin.dashboard_sales' is not BASE TABLE

如何解决这个问题?并可以在表格视图中建立索引吗?

1 个答案:

答案 0 :(得分:0)

您需要在表上创建索引,而不是在视图本身上。

op_total和order_date并不是这里的首要问题。您首先需要确保主查询上的on子句正在使用索引列,否则,可能需要为其创建适当的索引。

我建议您使用“解释计划”以检测性能问题。然后您可以采取必要的措施。

查询本身并不能提供给我们任何信息,因此,为确定可能的问题,必须提供说明计划