首页 > 解决方案 > 在查询视图时模拟 row_number 会显着影响性能

问题描述

查询视图时,我需要一个row_number结果查询字段。

与查询相同的视图相比,查询需要花费大量时间来运行。

没有row_number它大约需要 200 毫秒,而row_number运行它需要 30 秒。

我们的 DB 版本不支持ROW_NUMBER()语法。所以我目前正在实现相同的功能

(@row_number:=@row_number + 1) AS row_number

我试图运行的查询

SET @row_number = 0;
SELECT *, (@row_number:=@row_number + 1) AS row_number FROM some_view;

查看定义

CREATE 
    ALGORITHM = UNDEFINED 
    DEFINER = `user`@`%` 
    SQL SECURITY DEFINER
VIEW `some_view` AS
    SELECT 
        `some_table`.`field1` AS `field1`,
        `some_table`.`field2` AS `field2`,
        `some_table`.`field3` AS `field3`,
        `some_table`.`field4` AS `field4`,
        CAST(JSON_EXTRACT(`some_table`.`json_data`,'$.field5') AS SIGNED) AS `field5`,
        JSON_UNQUOTE(JSON_EXTRACT(`some_table`.`json_data`, '$.field6')) AS `field6`,
        JSON_UNQUOTE(JSON_EXTRACT(`some_table`.`json_data`, '$.field7')) AS `field7`,
        JSON_UNQUOTE(JSON_EXTRACT(`some_table`.`json_data`,'$.field8.name')) AS `field8`
    FROM
        `some_table`

期望为此查询获得合理的运行时间

标签: mysql

解决方案


推荐阅读