除限制外增强查询运行时

Posted

技术标签:

【中文标题】除限制外增强查询运行时【英文标题】:Enhance query runtime besides limit 【发布时间】:2021-12-30 10:02:22 【问题描述】:

我有一个 SQL 可以从 2 个表(大型数据库)中选择项目。我尝试通过在每张桌子上使用 LIMIT 来加快这个过程。然而,结果并不显着。有没有其他方法可以进一步提高查询时间?

原始查询

select a.item_id,
    from
        (SELECT distinct item_id
         FROM dim_item) a

        INNER JOIN

        (SELECT item_id
         FROM dim_item_attr) b

    on a.item_id = b.item_id

添加限制 10

select a.item_id,
    from
        (SELECT distinct item_id
         FROM dim_item
         LIMIT 10) a

        INNER JOIN

        (SELECT item_id
         FROM dim_item_attr
         LIMIT 10) b

    on a.item_id = b.item_id
    limit 10

【问题讨论】:

您使用的是哪个 dbms? 您的查询不清楚,您要检索什么?您正在使用哪个 dbms 引擎?这 2 个表的列上是否存在索引 - 需要更多详细信息才能为您提供更好的指导。 只要您有不同的子句,rdbms 必须完成查询执行,并且只有在此之后才能应用限制。 也许确切的限制数字并不重要,您可以删除不同的关键字,删除子查询并执行简单的连接,限制为像 1000 这样更大的数字,希望那里有 10 个不同的值然后在其上运行另一个查询,并使用 distinct 和 limit 10。 请包含表定义及其键。 【参考方案1】:

如果没有关于表、键、索引、DBMS 等的任何详细信息,很难给出任何建议,但我将从简化查询开始:

SELECT item_id
FROM dim_item a
WHERE EXISTS (
    SELECT 1
    FROM dim_item_attr b
    WHERE a.item_id = b.item_id
);

【讨论】:

以上是关于除限制外增强查询运行时的主要内容,如果未能解决你的问题,请参考以下文章

DirectX 11:运行简单的 DirectX 应用程序时运行时崩溃

应用程序在调试时运行时如何禁用 Firebase 崩溃报告?

使用ActiveSheet.Range时运行时错误13“类型不匹配”

添加新对象时运行时覆盖列表元素[重复]

JDK及CGLIB动态代理-AOP4种增强

表名正确时运行时错误3078