sql >> Databáze >  >> RDS >> Oracle

Nejrychlejší způsob porovnávání polí ve stejné tabulce s velkým množstvím dat v oracle

Především se domnívám, že váš úkol může být implementován (a měl by být ve skutečnosti) pomocí přímého SQL. Žádné ozdobné kurzory, žádné smyčky, pouze vybírá, vkládá a aktualizuje. Začal bych zrušením pivotování vašich zdrojových dat (není jasné, zda máte primární klíč ke spojení dvou sad, myslím, že ano):

Col0_PK    Col1    Col2    Col3    Col4
----------------------------------------
Row1_val   A       B       C       D
Row2_val   E       F       G       H

Nahoře jsou vaše zdrojová data. Pomocí UNPIVOT doložka převedeme na:

Col0_PK     Col_Name    Col_Value
------------------------------
Row1_val    Col1        A
Row1_val    Col2        B
Row1_val    Col3        C
Row1_val    Col4        D
Row2_val    Col1        E
Row2_val    Col2        F
Row2_val    Col3        G
Row2_val    Col4        H

Myslím, že chápete. Řekněme, že máme tabulku1 s jednou sadou dat a stejnou strukturovanou tabulku2 s druhou sadou dat. Je dobré používat indexově organizované tabulky.

Dalším krokem je vzájemné porovnání řádků a uložení podrobností o rozdílech. Něco jako:

insert into diff_details(some_service_info_columns_here)
 select some_service_info_columns_here_along_with_data_difference
  from table1 t1 inner join table2 t2
     on t1.Col0_PK = t2.Col0_PK
    and t1.Col_name = t2.Col_name
    and nvl(t1.Col_value, 'Dummy1') <> nvl(t2.Col_value, 'Dummy2');

A v posledním kroku aktualizujeme souhrnnou tabulku rozdílů:

insert into diff_summary(summary_columns_here)
 select diff_row_id, count(*) as diff_count
  from diff_details
 group by diff_row_id;

Je to jen hrubý návrh, který ukazuje můj přístup, jsem si jistý, že je třeba vzít v úvahu mnohem více detailů. Abych to shrnul, navrhuji dvě věci:

  1. UNPIVOT údaje
  2. Použijte SQL příkazy namísto kurzorů


  1. Seskupit řádky Dodržení pořadí hodnot

  2. Příklady FLOOR() v SQL Server

  3. Symfony/Doctrine:Jak zajistit, aby Doctrine fungovala s Unixovým socketem?

  4. Hvězdné schéma vs. schéma sněhové vločky