簡體   English   中英

SQL子查詢優化訪問

[英]SQL subquery optimization Access

我對SQL不太了解,所以希望您的知識可以改善下面的查詢。 事實是我的PC無法處理此查詢,因此我想知道是否有更好的方法來執行此操作。

我的查詢是:

SELECT 
    v.*, 
    IIF((SELECT COUNT(v2.pk) FROM demo v2 
         WHERE v.place = v2.place 
           AND v.date = v2.date) > 1, "Si", "No")
FROM demo AS v;

重點是標記具有相同place和相同date另一條記錄的記錄。

GROUP BY查詢開始,該查詢可為您提供placedate每種組合的計數...

SELECT v2.place, v2.date, COUNT(*) AS group_count
FROM demo AS v2 
GROUP BY v2.place, v2.date

然后,您可以將其用作子查詢,再聯接回demo表並將IIf表達式添加到頂級SELECT子句中。

SELECT
    v.*, IIf(sub.group_count > 1, 'Si', 'No')
FROM
    demo AS v
    INNER JOIN
    (
        SELECT v2.place, v2.date, COUNT(*) AS group_count
        FROM demo AS v2 
        GROUP BY v2.place, v2.date
    ) AS sub
    ON v.place = sub.place AND v.date = sub.date;

關於性能,您應該同時索引placedate字段。 如果demo表確實很大,則此查詢可能不會很快,但它應該比原始版本要快。

我建議您也用要查看的字段列表替換v.* v.*需要兩個步驟:首先找到與v.*對應的字段名稱; 其次,檢索這些字段的數據。 因此,列出字段名稱消除了第一步。 而且,如果僅需要查看可用字段的子集,則按名稱列出它們意味着數據庫引擎檢索的數據更少。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM