Főoldal | Könyvlista | Gyorskereső

Átmenetileg a rendelés és szállítás szünetel
SQL teljesítményfokozás

SQL teljesítményfokozás

Peter Gulutzan, Trudy Pelzer:
SQL teljesítményfokozás


Megjelenés: 2003
Kiskapu Kiadó
480 oldal, bolti ár: 4900,- Ft

Internetes ár (-5%): 4655,- Ft

db

A könyv ismertetése

Vissza a lap tetejére | A könyv tartalomjegyzéke

Peter Gulutzan, Trudy Pelzer:
SQL teljesítményfokozás

Végre egy gyakorlati megoldásokat bemutató kézikönyv olyan adatbázis-szakértők számára, akiknek a feladata egy szervezet kiemelt fontosságú adatainak hatékony kezelése! A témában megjelenő könyvek vagy csak egy adott rendszerrel foglalkoznak, vagy olyan általános megoldásokat adnak, melyek az életben nehezen használhatók.
A szerzők célja, hogy áthidalják a két terület közötti nagy szakadékot: a könyv azokhoz szól, akik az adatbázis-kezelés alapjait ismerik (sőt, munkájukhoz használják), de szeretnék megtanulni, hogyan tudják felgyorsítani a meglévő rendszert.

A könyv első fele a programozás oldalával foglalkozik: hogyan készítsük el lekérdezésünket, hogy a meglévő rendszeren a lehető leggyorsabb legyen, hogyan építsük fel az adatbázist, milyen indexeket használjunk stb. Ezek után pedig komolyabb vizekre evezünk, foglalkozunk a tárolt eljárásokkal, az ODBC és a JDBC lehetőségeivel, a zárolásokkal és a költségalapú optimizálással.
A könyv hasznos segítséget nyújt a következő rendszerekhez: IBM, Informix, Ingres, InterBase, Microsoft SQL Server, MySQL, Oracle, Sybase.

Bevezető

Egy gyenge teljesítményű adatbázisprogram a felhasználók idejét pazarolja, ráadásul a számítógépen, illetve a hálózaton futó többi programra is rossz hatással van.

Ez a könyv az SQL adatbázisok hatékonyabb használatához próbál segítséget nyújtani olvasói számára. A könyv nem ad bevezetést az SQL nyelvtanába, és nem egy adott SQL-megvalósításhoz ad tippeket, sőt a tervezés, illetve az adatmodellezés témakörét sem érinti. Ehelyett azoknak a felhasználóknak és programozóknak szól, akik javítani szeretnének SQL alkalmazásaik teljesítményén, függetlenül attól, milyen konkrét megvalósítást használnak. A könyv során olyan gyakori problémákat járunk körbe, mint a lekérdezések végrehajtásának felgyorsítása, az indexek használata és a különböző munkafázisok áthelyezése a kiszolgálóról az ügyfelekre.

Ahelyett, hogy egyetlen DBMS egyedi szolgáltatásaira támaszkodnánk, olyan ötleteket gyűjtöttünk össze, amelyeket a nagyobb SQL DBMS-ek mindegyikénél bevethetünk. Az ügyfél-kiszolgáló rendszerek programozóinak és a tanácsadóknak fel kell készülniük azokra az esetekre is, amikor a DBMS megváltozik, illetve amikor (és a legnagyobb kihívást ez jelenti) a DBMS ismeretlen. A könyvben bemutatott eljárásokat ezért nyolc jól ismert DBMS-sel is kipróbáltuk.

A legtöbb DBMS már tartalmaz optimalizálót. Ennek ellenére az Olvasó most olyan könyvet tart a kezében, amely szintén a teljesítmény növelésében próbál segíteni, ami azt jelenti, hogy vagy nincs tisztában valamivel…vagy pedig azt, hogy tud valamit. Vagyis két eset lehetséges:

    Nem vagyunk tisztában azzal, hogy a DBMS, amit használunk, jó-e.

    Tudjuk, hogy még a jó eszközök is jobban működnek, ha képzett kezek használják azokat.

Nem tudjuk, hogy a használt DBMS jó-e

Ez csak akkor fordulhat elő, ha most kezdünk adatbázis-kezeléssel foglalkozni. Különösen igaz ez, ha olyan lekérdezéseket vagy programokat írunk, amelyeknek több DBMS-sel is együtt kell működniük. Ebben az esetben valószínűleg a legnagyobb piaci részesedéssel rendelkező RDBMS-ek egyikével fogunk dolgozni (az adatok a 2001-es eladásokat tükrözik):

Oracle                 39.8%

IBM                 30.7% (az Informix megszerzése előtt)

Microsoft                 14.4%

Sybase                 3.3%

Informix                 3.3%

Ezen kívül találkozhatunk olyan DBMS-ekkel is, amelyeket webes munkához (például MySQL), a Borland termékeihez (például InterBase), asztali rendszerekhez (például Access), mobil és Java felületekhez (például Cloudscape) vagy beágyazott rendszerekhez (például Solid) fejlesztettek ki. A könyv során megpróbáltuk megtalálni e rendszerek között a közös nevezőt. Ha az autógyártással szeretnénk párhuzamot vonni, akkor ez nem az „autószerelők kézikönyve az 1999-es Cadillac modellekhez”, hanem az „autóvezetők kézikönyve a modern autók teljesítményének javításához”.

Tudjuk, hogy még a jó eszközök is jobban működnek szakképzett kezekben

Mindenki hallott már lassú SQL lekérdezésekről, sőt teljes rendszerekről is, amelyeket egyetlen embernek sikerült kis erőfeszítéssel feljavítania. Az ilyen teljesítménynövekedés általában nem túl nagy, ezért kerüljük a túlzó ígéreteket. A következőkről azonban biztosíthatjuk az Olvasót:

    A könyv leírásait bárki követni tudja kemény munka vagy komoly gondolkodás nélkül is. Mindössze annyit tételezünk fel, hogy az Olvasónak vannak programozási alapismeretei, és tisztában van az SQL szabvány nyelvtanával is. A könyvet akár egy repülőn vagy a tengerparton is elolvashatjuk.

    Megfigyeléseinket valódi DBMS-eken végzett tesztek támasztják alá.

    Amikor optimalizálásról beszélünk, kizárólag biztonságos, ésszerű, relációs megoldásokról lesz szó.

Az egyetlen vád, ami felhozható ellenünk, hogy az anyag helyenként általános alapelvek helyett csak tippeket ad, de ez természetes. A DBMS-optimalizálás során csak kevés általános érvényű elv érvényes. Ezek a következők:

    Először is, ne okozzunk kárt. (Ezt már Hippokratész is tanácsolta. Mindenkire vonatkozik, aki olyasmit próbál megjavítani, ami el sem romlott.)

    Szerezzünk be több memóriát, készítsünk indexeket és cseréljük ki a hálózat kábelezését. (Ha javítani tudunk a környezeten, tegyük meg.)

    Ügyeljünk a megfelelő tervezésre.

    Értsük meg a lekérdezést.

Az általános alapelvek helyett azt fogjuk megnézni, mihez kezdhetünk azzal, ami a kezünkben van. Ha időnként csak tippekre vagy figyelmeztetésekre futja, az azért van, mert hosszú évekre visszanyúló tapasztalataink azt mutatják, hogy a valós életből vett példák sokat segíthetnek az általános alapelvek megértésében. A tippek azonban csak akkor működnek, ha jól megalapozzuk azokat.

A könyv elkészítése során a következő DBMS-eket néztük meg: IBM DB2, Informix, Ingres II, InterBase, Microsoft SQL Server, MySQL, Oracle és Sybase (MS Windows NT). Ezek mindegyikét a gyártó által javasolt alapértelmezett beállításokkal telepítettük. Az összes példa az ANSI/ISO Standard SQL:1999 szerint íródott. A gazdanyelvi példákat  C és ODBC, vagy Java és JDBC felhasználásával készítettük.

A DBMS a barátunk. Ne forgassuk tehát fel, ne legyen üldözési mániánk vele kapcsolatban, és ne gondoljuk róla, hogy ostobán viselkedik. Kezeljük úgy, mint a barátunkat, próbáljuk jobban megismerni, és segítsünk neki, hogy ő is segíthessen nekünk.

A könyv tartalomjegyzéke

Vissza a lap tetejére | A könyv ismertetése

Peter Gulutzan, Trudy Pelzer:
SQL teljesítményfokozás

Tartalomjegyzék   v

Előszó   xiii

Köszönetnyilvánítás   xv

1. fejezet   Facilis Descensus Averni

A téma jelentős    2

„A Nyolcak”    3

Telepítési beállítások    5

A teszteredményekről    7

Hordozhatóság    8

Szóhasználat és alapfeltevések    8

Jelölések    9

Általános megjegyzések    10

2. fejezet   Egyszerű keresések

Általános finomhangolás    12

A kódok rangsorolása    12

Állandó-behelyettesítés    14

A felesleges kód kiszűrése    16

A megfelelő DBMS használatának kikényszerítése    18

Az állandók egyszerűsítése    18

Kis- és nagybetűket meg nem különböztető keresések    19

„SARGabilitás” - keresési változók    20

Összegzés: általános finomhangolás    22

Hangolás adott műveletekkel    22

Az AND művelet    22

Az OR művelet    23

AND plusz OR    24

A NOT művelet    25

Az IN művelet    26

A LIKE művelet    27

A SIMILAR művelet    29

A UNION művelet    30

Az EXCEPT művelet    32

Az INTERSECT művelet    32

A CASE művelet    32

Összegzés: hangolás adott műveletekkel    33

A stílusról    34

Záró gondolatok    35

3. fejezet   Az ORDER BY záradék

Általános rendezési megfontolások    37

A részleges egyezés lassítja a rendezést    41

Az előzetes rendezettség gyorsítja a rendezést    41

A megadott hossz számít    42

Az INTEGER jobb, mint a SMALLINT    42

Az INTEGER jobb, mint a CHAR    43

A halmaz jobb, mint a többszörös halmaz    43

Végeredmény    43

Az ORDER BY záradék    44

Rendezni vagy nem rendezni?    48

Összegzés: általános rendezés    48

Karakterek rendezése    49

A karakterek rendezésének támogatása    53

Jelsorrendek    55

Összegzés: karakterek rendezése    58

Egyéb lehetőségek    59

Rendezési kulcsok    59

Támogató index használata    61

Előrendezés    63

Összegzés: egyéb lehetőségek    63

Záró gondolatok    64

4. fejezet   A GROUP BY záradék

Emlékeztető    65

A leghatékonyabb GROUP BY záradékok    68

A HAVING záradék    70

A GROUP BY alternatívái    70

Összegzés: a leghatékonyabb GROUP BY záradékok    70

Rendezés    71

Indexek    72

Összegzés: rendezés    74

Halmazfüggvények és összegszámítások    75

A COUNT függvény    75

Baj van a SUM függvénnyel    76

Több összegzési szint    78

Kifejezések    79

Összegzés: halmazfüggvények    80

Záró gondolatok    81

5. fejezet   Táblák összekapcsolása

Összekapcsolási tervek    84

Beágyazott ciklus kapcsolatok    85

Összegzés: beágyazott ciklus kapcsolatok    91

Rendező-összefűző kapcsolatok    92

Összegzés: a rendező-összefűző kapcsolat módszere    93

Kivonatoló kapcsolatok    93

Összegzés: a kivonatoló kapcsolatok    94

Kerüljük el a táblakapcsolatokat    95

Kapcsolóindexek    95

Vegyes táblák    97

Összegzés: a táblakapcsolatok elkerülése    98

Három- és többtagú kapcsolatok    99

A régi és az ANSI stílusú kapcsolatok    101

Külső kapcsolatok    102

Záró gondolatok    105

6. fejezet   Belső lekérdezések

Emlékeztető    107

Táblakapcsolat vagy belső lekérdezés?    109

Kisimítás    112

Összegzés: táblakapcsolat vagy belső lekérdezés?    114

A lehetséges parancsformák    114

Az IN függvény    115

A DISTINCT záradék    116

Az EXISTS függvény    116

IN vagy EXISTS?    118

Kettős IN függvény    118

A TOP záradék    120

A > ALL feltétel    121

Halmazműveletek    121

Összegzés: választási lehetőségek a parancsformával kapcsolatban    122

Záró gondolatok    124

7. fejezet   Oszlopok

Mennyire fontos a méret?    126

Állandó vagy változó méret?    127

Összegzés: a méret kérdése    130

Karakterek    131

A hosszúság meghatározása    134

Különböző karakterkészletek    135

Összegzés: karakterek    136

Időadatok    136

Összegzés: időadatok    140

Számok    140

Egész számok    140

Lebegőpontos számok    143

Fixpontos számok    147

Számlálók    151

Összegzés: számok    152

Bitjellegű adatok    153

Összegzés: bitjellegű adatok    155

Nagy objektumok    155

Összegzés: nagy objektumok    159

NULL értékek    160

Összegzés: NULL értékek    161

A sorokon belüli oszlopsorrend    162

Összegzés: oszlopsorrend    163

Záró gondolatok    164

8. fejezet   Táblák

A tárolási rendszer    166

Lapok    166

Lapcsoportok    170

Fájlok    172

Partíciók    173

Táblahelyek    176

Összegzés: a tárolási rendszer    177

Kupacok    178

A ROWID    178

Költöztetés    180

Töredezettség    181

Szabad hely a lapokon    183

Összegzés: kupacok    184

Fürtök    185

Összegzés: fürtök    186

Normálformák    186

A normalizálási szabályok megszegése    192

Összegzés: normalizálás    196

Nézettáblák    197

Összegzés: nézettáblák    200

Záró gondolatok    200

9. fejezet   Indexek

Emlékeztető    202

A B-fák    203

Keresés a B-fában    207

Adatbeszúrás a B-fába    209

Törlés a B-fából    212

A töredezettség    213

A B-fa helyreállítása    214

Összegzés: B-fák    216

Az indexek típusai    217

Összetett indexek    217

Fedő indexek    220

Egyedi indexek    222

Fürtözött indexek    224

Összegzés: indextípusok    232

Bittérkép-indexek    234

Összegzés: bittérkép-indexek    236

Egyéb indexelési lehetőségek    237

Indexkulcs-értékek    238

Összegzés: indexkulcs-értékek    241

Záró gondolatok    241

10. fejezet   Megszorítások

A NOT NULL megszorítás    243

NULL-jelzők    247

Összegzés: NOT NULL megszorítások    248

A CHECK megszorítás    248

Összegzés: CHECK megszorítások    250

Az idegen kulcs megszorítások    250

Összegzés: FOREIGN KEY megszorítások    253

A PRIMARY KEY megszorítás    253

Összegzés: PRIMARY KEY megszorítások    257

A UNIQUE megszorítás    257

Összegzés: UNIQUE megszorítások    258

A kioldók    258

Összegzés: kioldók    262

A megszorítások tiltása    262

A késleltetés    262

A tiltás    263

A törlés    264

Összegzés: a megszorítások tiltása    264

Ügyfél oldali adatérvényesítés    265

Összegzés: ügyfél oldali adatérvényesítés    266

Felesleges záradékok a SELECT utasításban    266

Összegzés: felesleges záradékok a SELECT utasításban    267

Záró gondolatok    268

11. fejezet   Tárolt eljárások

Emlékeztető    270

Determinisztikus függvények    271

A tárolt eljárások előnyei    272

Kisebb adatforgalom    272

Részleges előfordítás    273

A paraméterek    275

További tanácsok    276

Összegzés: tárolt eljárások    279

Záró gondolatok    281

12. fejezet   ODBC

Emlékeztető    284

MS Query    288

SQLPrepare    297

Lekérdező ciklusok    299

Adatmódosító utasítások    302

Katalógusfüggvények    304

Záró gondolatok    305

13. fejezet   JDBC

Kapcsolatok    308

Kapcsolatok tárolása    309

Kapcsolati beállítások    311

Kapcsolatok és DBMS adatok    313

Összegzés: kapcsolatok    320

Lekérdezések előkészítése    322

Lekérdező utasítások    323

A lekérdezések formája    324

getBestRowIndentifier    324

ResultSetMetaData    325

Lekérdezések beállításai    327

Összegzés: lekérdezések előkészítése    329

Eredményhalmazok    331

Az eredményhalmaz mérete    331

getXXX metódusok    332

Összegzés: eredményhalmazok    335

Adatmódosítás    337

Összegzés: adatmódosítás    338

Záró gondolatok    338

14. fejezet   Adatmódosítások

Naplók    340

Összegzés: naplók    341

INSERT    341

Tömeges INSERT    343

Összegzés: INSERT    345

UPDATE    346

Függő UPDATE    347

Kötegelt UPDATE    347

Összegzés: UPDATE    348

DELETE    349

Összegzés: DELETE    350

Csúnya módosítások    350

Összegzés: csúnya módosítások    352

FETCH és adatmódosítás    352

Összegzés: FETCH és adatmódosítás    353

COMMIT és ROLLBACK    353

Összegzés: COMMIT és ROLLBACK    356

Záró gondolatok    356

15. fejezet   Zárolás

Mire való a zárolás?    358

Zárolási módok    360

Szemcsézettség    364

Zárolás-kiterjesztés    365

Közvetett zárolás    366

Összegzés: zárolás    367

Elszigeteltségi szintek    368

Párhuzamossági problémák és elszigeteltségi szintek    372

READ UNCOMMITTED tranzakciók    374

READ COMMITTED tranzakciók    375

REPEATABLE READ tranzakciók    376

SERIALIZABLE tranzakciók    377

READ ONLY vagy FOR UPDATE    379

Holtpontok    380

Összegzés: elszigeteltségi szintek    382

Indexzárolások    384

Összegzés: indexzárolások    386

Forrópontok    386

Összegzés: forrópontok    388

Optimista zárolás    388

Összegzés: optimista zárolás    391

A keresési trükk    392

Záró gondolatok    393

16. fejezet   Ügyfelek és kiszolgálók

A közvetítő    396

Összegzés: a közvetítő    397

Kiszolgálófolyamatok és -szálak    398

Rendszerfolyamatok és -szálak    398

Ügyfélenkénti folyamatok és -szálak    399

Elszigeteltség és párhuzamosság    400

Összegzés: kiszolgálófolyamatok és -szálak    401

Az ügyfél feladata    402

Ügyfélmodell    403

Összegzés: tippek az ügyfelekhez    405

Záró gondolatok    407

17. fejezet   Költség alapú optimalizálás

Költség    411

Statisztikák és hisztogramok    412

A statisztikák elemzése    416

EXPLAIN    417

Tippek    417

Záró gondolatok    418

 

 

A. függelék   További olvasmányok   419

B. függelék   Szójegyzék   421

Tárgymutató   443

Vissza a lap tetejére

mesekönyv

szoftver