首页 > 解决方案 > 如何将索引添加到表视图 MySQL

问题描述

我遇到了数据库性能问题,因为已构建的查询中有太多连接。我主动创建了一个表格视图,让流程变得比以前更快,代码如下

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

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

标签: mysqldatabase

解决方案


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

op_total 和 order_date 不是这里的第一个问题。您首先需要确保主查询上的 on 子句使用索引列,如果没有,您可能需要为其创建适当的索引。

我建议您使用解释计划来检测性能问题。然后你可以采取必要的行动。

查询本身并没有为我们提供信息,解释计划对于确定可能的问题是必要的


推荐阅读