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

Používá Oracle vyhodnocování zkratů?

Záleží na tom..Oracle obecně nezaručuje, že příkaz SQL použije vyhodnocení zkratu (ačkoli PL/SQL zaručeně provede vyhodnocení zkratu). Optimalizátor Oracle může vyhodnotit predikáty v jakémkoli pořadí, které očekává, že bude nejefektivnější. To by mohlo znamenat, že první predikát je vyhodnocen jako první a pouze odpovídající řádky mají vyhodnocený druhý predikát, ale je zcela možné, že se stane buď opak, nebo že Oracle transformuje dotaz na jakýsi UNION a plně vyhodnotí oba predikáty před spojením výsledků.

Jak již bylo řečeno, pokud optimalizátor dokáže v době kompilace určit, že predikát bude vždy vyhodnocen jako TRUE nebo FALSE , měl by to optimalizátor považovat za konstantu. Pokud je tedy například v tabulce omezení, které brání X z toho, že někdy bude mít hodnotu 'true', neměl by optimalizátor vůbec vyhodnocovat druhý predikát (ačkoli různé verze optimalizátoru budou mít různé schopnosti detekovat, že je něco v době kompilace konstanta).

Pokud jde o druhou část vaší otázky, bez zobrazení plánů dotazů je velmi těžké říci. Optimalizátor Oracle bývá docela dobrý v transformaci dotazů z jednoho formuláře do druhého, pokud existují efektivnější způsoby, jak to vyhodnotit. Obecně však platí, že pokud subQ vrátí relativně velký počet řádků ve srovnání s table , může být efektivnější strukturovat dotaz jako EXISTS spíše než jako IN .



  1. MySQL (nebo PHP?) seskupuje výsledky podle dat pole

  2. ERROR 2002 (HY000):Nelze se připojit k místnímu serveru MySQL přes soket '/var/run/mysqld/mysqld.sock' (2)

  3. Transformujte data ODBC v CloverDX

  4. Potřebuji svou stránku PHP, aby zobrazila můj obrázek BLOB z databáze mysql