Posted By: Jovo () on 'CZdatabases'
Title:     Jovo1
Date:      Wed Sep 20 19:02:00 2000

Z Jovova zapisniku - 1:"Jak nevybrat vubec nic"
===============================================

  Jak zajistit, aby dany SELECT nevybral vubec nic ? Budete se divit, ale
obcas se to hodi.

Nasel jsem par moznosti:

1) SELECT .... WHERE 1=0
2) SELECT .... WHERE klic IS NULL
3) SELECT .... WHERE rowid IS NULL
4) vytvoreni prazdne tabulky a SELECT na ni. 
5) SELECT .... WHERE klic IN (SELECT co nic nevybere a nevaze se
   na "vrchni" tabulku)
6) SELECT .... WHERE id = 0

ad [1]
    Logicke a vzdy fungujici. Ma to jen jednu vadu : kdyz je spatne nastaveny
  DB stroj (popripade stroj neumi optimalizace), tak se muze stat, ze na 
  velkych tabulkach to trva moc dlouho. 
    Problem je vetsinou v tom, ze DB stroj nevyhodnoti 1=0 jako konstantni
  vyraz, ale projde celou tabulku a na kazdy radek aplikuje 1=0 a ted ceka, 
  jestli mu to nahodou nebude sedet :-)  Pokud mate v tabulce milion polozek, 
  tak si uzijete. 
ad [2]
    Parada. I pokud mame blby stroj z bodu [1], tak to funguje celkem rychle, 
  zvlast kdyz kazdy poradny clovek dela nad klicem index. Vada je, kdyz je 
  klic slozeny, nebo ho tabulka vubec nema (-> klic - vsechny sloupce).
ad [3]
    Tak toto by melo zabrat vzdy a na jakemkoli databazovem stroji. praxe 
  ovsem zaznamenala pripady, kdy tento zpusob zpusobi (hezke slovni spojeni,
  ze ? :-)   na nekterych DB pad samotneho DB stroje. Dokonce nastaly pripady,
  kdy stroj na jedne platforme (treba HP) jel a na druhe (treba SGI) vzdy
  spadnul.
ad [4]
    Idealni reseni. Sice je tu rezie navic, ale vzdy to funguje ... krome
  pripadu, kdy si nemuzeme sahnout na klauzuli SELECT, ktera se preda 
  nekam dal (muzeme sahat pouze na WHERE, FROM). Da se spojit i tabulka
  s prazdnou tabulkou. Slusne nastaveny stroj s tim nema problem, ale
  jeden nikdy nevi.
ad [5]
    Da se pouzit, kdyz nemuzeme manipulovat klauzule FROM. Jinak plati 
  totez, co u bodu (4).
ad [6]
    Lze pouzit pouze, ma li tabulka sloupec id typu serial. Plati 
  vse, popsane u (2).

 Co delat, kdyz muzete manipulovat pouze sekci WHERE, tabulka ma milion a 
dva radky, nema klic a zpusob s rowid shodi masinu a administrator neco
prehledl v konfiguraci, popripade sam DB stroj je tupoun ? Ne ze by u nas 
nebyli sikovni kluci, ale nas DB stroj se chova jako v bodech (1),(3) a tak 
zatim pouzivame reseni (2).
  Ma nekdo nejaky dalsi napad ?
  Me z toho zatim vyplyva, ze at delas, co delas, nekdy je vsechno 
na pytel :-)

Vas Jovo.

Search the boards