Tworzenie baz danych. Stworzenie bazy danych. Pliki danych. Najprostsze polecenie: CREATE DATABASE baza. Tworzy się dokładna kopia bazy model

Podobne dokumenty
przygotował: Installation MS SQL Server

Administracja i programowanie pod Microsoft SQL Server 2000

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

Administracja i programowanie pod Microsoft SQL Server 2000

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

Tworzenie tabel. Bazy danych - laboratorium, Hanna Kleban 1

Aspekty aktywne baz danych

Bazy danych. Dr inż. Paweł Kasprowski

Autor: Joanna Karwowska

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Język SQL, zajęcia nr 1

Wykład 4. SQL praca z tabelami 1

060 SQL FIZYCZNA STRUKTURA BAZY DANYCH. Prof. dr hab. Marek Wisła

Tuning SQL Server dla serwerów WWW

Instrukcja CREATE TABLE

Ref. 7 - Język SQL - polecenia DDL i DML

Bazy danych 6. Klucze obce. P. F. Góra

Wykład 8. SQL praca z tabelami 5

LAB 6 BEGIN TRANSACTION, COMMIT, ROLLBACK, SET TRANSACTION ISOLATION LEVEL,

Sprawdzenie poziomu izolacji transakcji (w aktualnym połączeniu):

Wykład 05 Bazy danych

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

SELECT * FROM tabela WHERE warunek wybiera dane spełniające podany warunek

1 Zaznacz poprawne stwierdzenia dotyczące grup plików (filegroup) możemy określić do której grupy plików trafi

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

Bazy danych Ćwiczenia projektowe

SQL SERVER 2016 IN MEMORY

Aby uruchomić program klienta i połączyć się z serwerem, należy komendę:

SQL Server. Odtwarzanie baz danych.

3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

SQL - DDL. 1 Tabele systemowe. 2 Typy danych

Bazy danych 7. SQL podstawy

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

040 STRUCTURED QUERY LANGUAGE. Prof. dr hab. Marek Wisła

1. Połączenie z bazą danych. W wybranym edytorze tworzymy plik sqltest.py i umieszczamy w nim poniższy kod. #!/usr/bin/python3 import sqlite3

Bazy danych - Materiały do laboratoriów VIII

Paweł Rajba

Nowe technologie baz danych

UPDATE Studenci SET Rok = Rok + 1 WHERE Rodzaj_studiow =' INŻ_ST'; UPDATE Studenci SET Rok = Rok 1 WHERE Nr_albumu IN ( '111345','100678');

Tworzenie baz danych i tabel

Fizyczna struktura bazy danych w SQL Serwerze

Wykład 2. SQL 1 Structured Query Lenguage

Język SQL. Rozdział 9. Język definiowania danych DDL, cześć 1. Tworzenie relacji, typy danych, wartości domyślne atrybutów, słownik bazy danych.

Administracja i programowanie pod Microsoft SQL Server 2000

Literatura: SQL Ćwiczenia praktyczne Autor: Marcin Lis Wydawnictwo: Helion. Autor: Joanna Karwowska

Wprowadzenie do języka T-SQL. Michał Bleja

Typy Oracle atrybutów relacji Typ NUMBER (1)

Typy Oracle atrybutów relacji Typ NUMBER (1)

Język SQL. Rozdział 9. Język definiowania danych DDL, część 2.

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

Ustawienie na poziomie sesji (działa do zmiany lub zakończenia sesji zamknięcia połączenia).

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Odnawialne Źródła Energii I rok. Tutorial PostgreSQL

Bazy danych 10. SQL Widoki

SQL w praktyce. Miłej i owocnej nauki!!!

Projektowanie systemów baz danych

Projektowanie bazy danych. Jarosław Kuchta Projektowanie Aplikacji Internetowych

Wykład 5. SQL praca z tabelami 2

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

BAZY DANYCH. CREATE TABLE dbo.wydzialy (ID INT, Akronim VARCHAR(4) NOT NULL, Wydzial VARCHAR(30) NOT NULL, CONSTRAINT Kluczyk PRIMARY KEY(ID) )

Bazy danych 9. SQL Klucze obce Transakcje

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia

Hurtownia Świętego Mikołaja projekt bazy danych

SIECI KOMPUTEROWE I BAZY DANYCH

Relacyjne bazy danych. Podstawy SQL

LAB 3 (część 1 Projektu)

Lab.8: Podstawy języka SQL.

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

DECLARE VARIABLE zmienna1 typ danych; BEGIN

SQL DDL DML TECHNOLOGIE BAZ DANYCH. Wykład 5: Język DDL i DML. Małgorzata Krętowska

Język SQL, zajęcia nr 2

Składowane procedury i funkcje

Bazy danych. dr inż. Arkadiusz Mirakowski

SQL 4 Structured Query Lenguage

D D L S Q L. Co to jest DDL SQL i jakie s jego ą podstawowe polecenia?

Wykład 5 funkcje i procedury pamiętane widoki (perspektywy) wyzwalacze

Dr Michał Tanaś(

Tworzenie tabeli przez select CREATE TABLE PRAC2 AS SELECT P.NAZWISKO, Z.NAZWA FROM PRAC P NATURAL JOIN ZESP Z

Relacyjne bazy danych. Podstawy SQL

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Systemowe aspekty baz

Systemowe aspekty baz danych

SQL :: Data Definition Language

Bazy danych 5. Samozłaczenie SQL podstawy

Tabela wewnętrzna - definicja

Kurs. Podstawy MySQL

Widok Connections po utworzeniu połączenia. Obszar roboczy

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.

Bazy danych. Polecenia SQL

Internetowe bazy danych

Projekt jest finansowany ze środków Unii Europejskiej, Europejskiego Funduszu Społecznego i budŝetu państwa. Studia Podyplomowe dla Nauczycieli

Ile rekordów będzie zawierała tabela przy założeniu, że na początku była pusta?

T-SQL dla każdego / Alison Balter. Gliwice, cop Spis treści. O autorce 11. Dedykacja 12. Podziękowania 12. Wstęp 15

BAZY DANYCH Cz III. Transakcje, Triggery

Rozdział 17. Zarządzanie współbieżnością zadania dodatkowe

Transkrypt:

Tworzenie baz danych Stworzenie bazy danych Najprostsze polecenie: CREATE DATABASE baza Tworzy się dokładna kopia bazy model C:\...\Data\baza.mdf C:\...\Data\baza.ldf Pliki danych CREATE DATABASE baza ON (NAME=nazwa, FILENAME= nazwa_pliku, SIZE=10MB, MAXSIZE = 20MB UNLIMITED FILEGROWTH = 20% 2MB),... LOG ON (NAME=nazwa, FILENAME= nazwa_pliku, SIZE=10MB, MAXSIZE = 20MB UNLIMITED FILEGROWTH = 20% 2MB),... 1

Po co nam dziennik? 1 Modyfikacja danych 3 Zapis zmiany do logu Cache Disk 2 Strony są odczytywane z dysku Disk 4 Zapis zmiany do bazy Działanie dziennika (logu) Wszystkie zmiany danych są zapisywane najpierw w pliku logu Każdy wpis przyporządkowany jest transakcji Miejsca rozpoczęcia i zakończenia transakcji są zapisywane w logu CHECKPOINT to miejsce w logu od którego zmiany nie zostały zapisane na dysk Zapis zmian danych do pliku powoduje zmianę położenia CHECKPOINTU W razie awarii rollback nie zakończonych i rollforward zakończonych transakcji Budowa plików z danymi Page (strona) 8kB Extent 8 kolejnych stron Uniform extent zawiera strony tylko jednego obiektu Mixed extent zawiera strony należące do różnych obiektów 2

Początek pliku Header PFS GAM SGAM Page0: File Header nazwa logiczna, parametry zmiany rozmiaru itp. Page1: PFS (Page Free Space) bajt o każdej stronie (8000 pierwszych stron 64MB) Page2: GAM (Global Allocation Map) bit na każdy extent zajęty czy wolny (64k extentów = 2GB) Page3: SGAM (Shared Global Allocation Map) bit na każdy extent czy są wolne strony (64k extentów = 2GB) Znaczenie bitów GAM i SGAM Zawartość extentu Bit GAM Bit SGAM Wolny 1 0 Uniform lub pełny 0 0 Mixed z wolnymi stronami 0 1 Przydziały obiektów Strona IAM (Index Allocation Map) "Wejście" do obiektu Wskaźniki na pierwsze 8 stron Bitmapa zajętości extentów (pokrywa 512 tys. stron) 3

Maksymalne... Baz na serwerze 32.767 Wielkość bazy 1.048.516 TB Plików w bazie 32.767 Wielkość pliku 32 TB Obiektów w bazie (tables, views, stored procedures, extended stored procedures, triggers, rules, defaults, and constraints) Kolumn w tabeli 1024 2.147.483.647 Organizacja bazy danych Primary Filegroup Baza danych Filegroup Log Log File.mdf File.ndf File.ndf File.ndf Podział na grupy plików CREATE DATABASE baza ON PRIMARY (NAME=nazwa,FILENAME= nazwa_pliku,size=10mb,maxsize=20mb FILEGROWTH = 20%), (NAME=nazwa,FILENAME= nazwa_pliku,size=10mb,maxsize=20mb FILEGROWTH = 20%), FILEGROUP fg1 ( (NAME=nazwa,FILENAME= nazwa_pliku,size=10mb,maxsize=20mb FILEGROWTH = 20%), (NAME=nazwa,FILENAME= nazwa_pliku,size=10mb,maxsize=20mb FILEGROWTH=20%)) 4

Rodzaje grup PRIMARY tu umieszczane są wszystkie obiekty systemowe User-defined tu umieszczane są obiekty dla których zdefiniowano właściwość ON filegroup CREATE TABLE tablica (pole1 int,pole2 int) ON fg1; DEFAULT obiekty dla których nie zdefiniowano ON Dodanie grupy ALTER DATABASE baza ADD FILEGROUP newfg GO ALTER DATABASE baza ADD FILE (NAME = mojnowyplik', FILENAME = 'c:\...\plik.ndf, SIZE = 5MB) TO FILEGROUP newfg GO Po co więcej plików? Zwiększenie wydajności szybszy dostęp gdy więcej dysków Ułatwienie obsługi małe pliki łatwiej używać kopie tylko niektórych plików Podwyższenie bezpieczeństwa danych pliki read only Ochrona danych systemowych osobny plik na dane systemowe 5

Parametry bazy danych Auto options Cursor options Recovery options SQL options State options Auto options AUTO_CLOSE AUTO_CREATE_STATISTICS AUTO_UPDATE_STATISTICS AUTO_SHRINK Cursor options CURSOR_CLOSE_ON_COMMIT CURSOR_DEFAULT [LOCAL GLOBAL] 6

Recovery options RECOVERY FULL BULK_LOGGED SIMPLE PAGE_VERIFY CHECKSUM TORN_PAGE_DETECTION NONE Snapshot isolation (2k5) ALLOW_SNAPSHOT_ISOLATION ON: dozwolony poziom izolacji SNAPSHOT w którym transakcja widzi dane takie jak przy starcie transakcji OFF: poziom izolacji SNAPSHOT nie jest dozwolony READ_COMMITTED_SNAPSHOT ON: transakcja na poziomie READ COMMITTED widzi dane takie jak przy starcie transakcji OFF: transakcja na poziomie READ COMMITTED blokuje się przy brudnym odczycie SQL options ANSI_NULL_DEFAULT domyślnie kolumna ma NULL/NOT NULL ANSI_NULLS ON: porównania z NULL zawsze dają UNKNOWN OFF: porównanie z NULL danej o wartości NULL daje TRUE ANSI_PADDING ON: nie obcina automatycznie końcowych spacji w polach varchar OFF: obcina automatycznie końcowe spacje w polach varchar ANSI_WARNINGS ON 7

SQL options ANSI_WARNINGS ON: Ostrzeżenia przy dzieleniu przez zero ARITHABORT arithmetic abort przerywa wykonanie zapytania NUMERIC_ROUNDABORT błąd przy utracie precyzji w wyrażeniu CONCAT_NULL_YIELDS_NULL ON: łączenie (konkatenacja) łańcuchów z NULL daje NULL OFF: łańcuch NULL jest traktowany jak pusty RECURSIVE_TRIGGERS QUOTED_IDENTIFIER -- to się nie uda! SET QUOTED_IDENTIFIER OFF CREATE TABLE "select" ("identity" int IDENTITY, "order" int) -- to się uda SET QUOTED_IDENTIFIER ON CREATE TABLE "select" ("identity" int IDENTITY, "order" int) SELECT "identity","order" FROM "select" ORDER BY "order" -- to się uda zawsze CREATE TABLE [select] ([identity] int IDENTITY, [order] int) SELECT [identity],[order] FROM [select] ORDER BY [order] -- ale nie jest to dobry pomysł! State options ON_LINE OFF_LINE EMERGENCY READ_ONLY READ_WRITE SINGLE_ USER RESTRICTED_ USER MULTI_USER 8

Warunek wykonania zmiany WITH <termination> WAIT (domyślnie) czekaj aż aktualne transakcje się zakończą ROLLBACK AFTER 10 [SECONDS] poczekaj N sekund i wyrzuć wszystkie transakcje ROLLBACK IMMEDIATE wyrzuć wszystkie transakcje NO_WAIT jeśli są transakcje poddaj się Przykłady poleceń ALTER DATABASE baza SET QUOTED_IDENTIFIER ON, RECOVERY FULL, MULTI_USER GO ALTER DATABASE baza SET SINGLE_USER WITH ROLLBACK AFTER 10 GO Typy danych Liczbowe Całkowite Dokładne numeryczne Zmiennoprzecinkowe Walutowe Data i czas Tekstowe BLOB Specjalne 9

Typy liczbowe int 4 bigint 8 smallint 2 tinyint 1 decimal(p[,s]) 2-17 numeric (p[,s]) 2-17 float(n) n(1-24) 7 cyfr mantysy 4B n(25-53) 15 cyfr mantysy 8B real 4 money 8 smallmoney 4 Typy datowe i tekstowe datetime 8 smalldatetime 4 char(n) 0-8000 varchar(n) 0-8000 nchar(n) 0-8000 (4000 znaków!) nvarchar(n) 0-8000 (4000 znaków!) binary 0-8000 varbinary 0-8000 Pozostałe typy image 0-2 GB text 0-2 GB ntext 0-2 GB uniqueidentifier 16 bit 1 timestamp 8 sql_variant do 8000 SQL2K5 nowy typ: xml 10

Definiowanie własnych typów Stworzenie typu EXEC sp_addtype nazwisko, 'nvarchar(25)', NULL Usunięcie typu EXEC sp_droptype nazwisko Organizacja wiersza danych Nagłówek Pola o stałej długości Null Block Variable Block Pola o zmiennej długości Nagłówek 4 bajty jy Null block 2B na ilość kolumn, Null Bitmap (1 bit na kolumnę mówiący czy kolumna jest pusta) Variable block 2B na ilość kolumn, po 2B na kolumnę zawierające wskaźnik na koniec wartości Max długość wiersza 8060 B Przechowywanie BLOB Specjalne struktury drzewiaste Można zdefiniować jak duże mają się mieścić w wierszu. EXEC sp_tableoption 'tablica', 'text in row', '1000' Max wielkość wiersza: 8060 B. Duże BLOBy są przechowywane jako wskaźniki (16B) 11

Kolumna IDENTITY Jedna w tablicy Definicja: IDENTITY[(seed,incr)] CREATE TABLE pracownicy ( nr_prac int IDENTITY(100,1), nazwisko varchar(30))) insert into pracownicy values ( Kowalski ); insert into pracownicy values ( Nowak ); insert into pracownicy values ( Iksiński ); nr_prac nazwisko ----------- ---------- 100 Kowalski 101 Nowak 102 Iksiński Kontrola IDENTITY select IDENT_CURRENT('tablica') globalnie najwyższa wartość kolumny select @@identity from tablica ostatnia wartość wpisana w tej sesji (NULL jeśli nic nie było wpisane) select SCOPE_IDENTITY() ostatnia wstawiona wartość IDENTITY (do dowolnej tabeli) w tym zakresie select IDENT_SEED( tablica ) select IDENT_INCR( tablica ) Wyłączanie IDENTITY CREATE TABLE pracownicy ( nrp int IDENTITY(100,1), nazw varchar(30))) insert into pracownicy values ( Kowalski ); SET IDENTITY_ INSERT pracownicy ON insert into pracownicy(nrp,nazw) values (200, Nowak ); SET IDENTITY_INSERT pracownicy OFF insert into pracownicy values ( Iksiński ); nr_prac nazwisko ----------- ---------- 100 Kowalski 200 Nowak 201 Iksiński 12

Nieunikalne IDENTITY CREATE TABLE pracownicy ( nrp int IDENTITY(100,1), nazw varchar(30))) insert into pracownicy values ( Kowalski ); insert into pracownicy values ( Iksiński ); SET IDENTITY_INSERT pracownicy ON insert into pracownicy(nrp,nazw) values (100, Nowak ); SET IDENTITY_INSERT pracownicy OFF nr_prac nazwisko ----------- ---------- 100 Kowalski 101 Iksiński 100 Nowak Typ uniqueidentifier 16B (128b) - unikalny GLOBALNIE (GUID) CREATE TABLE pracownicy ( nrp uniqueidentifier NOT NULL DEFAULT newid(), nazw varchar(30))) insert into pracownicy(nazw) values ( Kowalski ); insert into pracownicy(nazw) values ( Iksiński ); insert into pracownicy(nazw) values ( Nowak ); nr_prac nazwisko ------------------------------------ ---------- 075860D6-FBAC-466E-A0F5-5EAF0D69543B Kowalski A5B7C0BD-0F23-4F79-9758-AF35A6D20D3D Iksiński FF8BEBC6-21F8-46A1-8108-8507BA9509E0 Nowak Typ timestamp (rowversion) CREATE TABLE tt (a int, b timestamp) insert into tt(a) values (1); insert into tt(a,b) values(2,null) a b ----------- ------------------ 1 0x00000000000000CC 2 0x00000000000000CD update tt set a=3 where a=1 a b ----------- ------------------ 3 0x00000000000000CF 2 0x00000000000000CD 13

Ograniczenia - CONSTRAINTS Default Check Primary Key Unique Foreign Key CREATE DEFAULT Default constraints Nie dla IDENTITY Działa tylko przy instertach Można użyć zmiennych lub funkcji systemowych: newid(), user, getdate() CREATE TABLE tablica( tekst varchar(50), wpisal varchar(30) default user, data_wpisu datetime default getdate() ) insert into tablica(tekst) values( Nowy tekst ) tekst wpisal data_wpisu ------------ ---------------- ----------------------- Nowy tekst pawel 2005-10-10 20:52:02.513 Check constraint Działa przy każdej zmianie danych CREATE TABLE pracownicy( pensja int check (pensja>0), data_ur datetime, opis varchar(50), constraint data_mniejsza check(data_ur<getdate())) insert into pracownicy values(10, 2100, ) INSERT statement conflicted with COLUMN CHECK constraint 'data_mniejsza'. insert into pracownicy values(-10, 1980, ) INSERT statement conflicted with COLUMN CHECK constraint 'CK pracownic pensj 7E6CC920'. 14

Check constraint Może dotyczyć więcej niż 1 kolumny CREATE TABLE projekty ( start datetime, koniec datetime, constraint t koniec_po_starcie i check (start<koniec)) t<k Można użyć wyrażeń logicznych ALTER TABLE tablica ADD CONSTRAINT dataur CHECK (dataur>'01-01-1900' AND dataur<getdate()) Check constraint Można używać wzorców CREATE TABLE adresy ( miasto varchar(30), kod char(6) check(kod LIKE '[0-9][0-9]-[0-9][0-9][0-9]'), ulica varchar(40) check(ulica like '[a-z]%[0-9]') ) insert into adresy values( Gliwice','22-445', Ala 6') insert into adresy values( Gliwice','22-44', Ala 6') insert into adresy values( Gliwice','22-442', 5Ala 6') insert into adresy values( Gliwice','22-442', 5 Ewa') NOCHECK Nie sprawdza warunków na już wpisanych wierszach CREATE TABLE tablica ( a INT); INSERT INTO tablica VALUES (-1); ALTER TABLE tablica ADD CONSTRAINT mycheck CHECK (a > 1); ALTER TABLE statement conflicted with COLUMN CHECK constraint 'mycheck'. ALTER TABLE tablica WITH NOCHECK ADD CONSTRAINT mycheck CHECK (a > 1); The command(s) completed successfully. 15

Primary key Jeden w tabeli (może być kilka kolumn) Automatycznie tworzy się indeks CREATE TABLE tablica ( a INT [[NON]CLUSTERED] PRIMARY KEY, b varchar(20)); CREATE TABLE tablica ( a INT, b varchar(20), PRIMARY KEY (a)); ALTER TABLE tablica ADD CONSTRAINT primary_key PRIMARY KEY NONCLUSTERED (a); Unique Może mieć jedną wartość NULL Może być więcej kolumn w tablicy Nie można dla kolumn należących ą do PK Automatycznie tworzy się indeks Foreign key Nie ma SET NULL Może być więcej kolumn w tablicy Można dodać WITH NOCHECK CREATE TABLE tablica ( a INT, b varchar(20), PRIMARY KEY (a,b)); CREATE TABLE tab2( x int, y varchar(20), foreign key (x,y) references tablica(a,b) on update cascade); 16

Wyłączanie sprawdzania Przy ładowaniu dużych ilości danych Gdy wiadomo, że spełniają warunki Gdy nie spełniają ale wygodniej jest je poprawić w bazie ALTER TABLE tablica NOCHECK CONSTRAINT mój_warunek... Ładowanie danych... ALTER TABLE tablica CHECK CONSTRAINT mój_warunek CREATE DEFAULT Jedna definicja używana w różnych miejscach (także w typach użytkownika) CREATE DEFAULT mojkraj AS Polska sp_bindefault mojkraj, pracownicy.kraj' sp_bindefault mojkraj, studenci.kraj' sp_bindefault mojkraj, adresy.kraj' Wyłączanie default sp_unbindefault mojkraj, adresy.kraj' Kolumny wyliczane (computed) create table prac(nrp int, adr_domowy varchar(30), adr_praca varchar(30), koresp int, adr_koresp as CASE koresp WHEN 0 THEN adr_domowy ELSE adr_praca END ) insert into prac values(1,'chorzów','gliwice',0) select * from prac nrp adr_domowy adr_praca koresp adr_koresp --- ------------ ----------- ------ ----------- 1 Chorzów Gliwice 0 Chorzów update prac set koresp=1 select * from prac nrp adr_domowy adr_praca koresp adr_koresp --- ------------ ----------- ------ ----------- 1 Chorzów Gliwice 1 Gliwice 17

Sposób zapisu danych Wiersz może zajmować tylko 1 stronę Na stronie może być więcej wierszy Strona IAM przechowuje informacje które strony i extenty w pliku należą do obiektu Adres pierwszej strony IAM każdego obiektu jest w tablicy sysindexes Dostęp do danych Table scan Clustered index Nonclustered index (max. 249 różnych indeksów) Sposób działania indeksów Sposob działania B-drzewa (root, node, leaf) Indeksy clustered liście to bezpośrednio dane Indeksy nonclustered liście to wskaźniki na dane: <file_id:page_no:row_no> id:page no> 18

Obiekty w sysindexes Dane: Heap - tablica bez indeksu (indid=0) Clustered table tablica poindeksowana indeksem clustered (indid=1) Nonclustered indexes indeks jakiejś tablicy (indid=2..249) BLOB (text, image) łańcuch obiektów (indid=250) Indeksy clustered (CL) i nonclustered (NCL) Wyszukiwanie według indeksu NCL w tabeli, która ma indeks CL: Znajdź w drzewie NC wartość odpowiadającego klucza CL Znajdź w drzewie CL szukany rekord create table prac (nrp int primary key, nazwisko char(10)) create index inazw on prac(nazwisko) select * from prac where nazwisko= Kowalski Zalety i wady indeksów Zalety: Przyspieszają wyszukiwanie danych Mogą wymuszać unkalność danych Wady: Spowalniają wprowadzanie danych Spowalniają zmianę indeksowanych danych Zajmują miejsce (ilość zależy od wielkości pola indeksowanego) Utrudniają administrację bazą 19

Modyfikacje danych CL Dodawanie wierszy Jeśli to konieczne to podział strony Strony lista dwukierunkowa Modyfikacje wierszy (pola indeksowanego) Fizyczne przenoszenie rekordów między stronami Usuwanie wierszy łączenie stron Indeksy NCL Tylko ewentualne zmiany odnośników do CL Modyfikacje danych Heap Dodawanie wierszy Jeśli to konieczne to tworzenie nowej strony Modyfikacje wierszy - bezpośrednio Usuwanie wierszy powstaje miejsce do wykorzytania Indeksy NCL Forwarding Pointers Zmiany tylko na stronach indeksu Tworzenie indeksów Tworzenie indeksu create index nazwa on tablica(kolumna,...) create unique index nazwa on tablica(kolumna,...) create clustered index nazwa on tablica(kolumna,...) l create unique clustered index nazwa on tablica(kolumna,...) Usuwanie indeksu drop index tablica.nazwa 20

Zasady tworzenia indeksów Lepiej używać PK i UNIQUE Najpierw clustered Nie duplikować indeksów! Pola indeksowane powinny być małe Używać UNIQUE jeśli to możliwe SELECT id, COUNT(*) FROM tablica GROUP BY id HAVING COUNT(*)>1 Indeksy złożone (composite) Maksymalnie 16 kolumn (900 bajtów) Kolejność ma znaczenie! create index xyz on prac(nazw,imie) create index xyz on prac(imie,nazw) Najlepiej najpierw kolumnę bardziej unikalną Indeks jest używany tylko gdy zapytanie zawiera we frazie WHERE jego pierwszą kolumnę! Opcja FILLFACTOR Określa jak wypełnić strony Domyślnie 100% Zmniejszanie wartości zwiększa zajętość dysku ale przyspiesza operacje insert i update Bez PAD_INDEX dotyczy tylko liści create index xyz on prac(nazw,imie) with [PAD_INDEX,] FILLFACTOR=70 21

Program DBCC DBCC Database Consistency Checker Program wykonujący około 130 różnych operacji DBCC checkdb DBCC cleantable DBCC perflog DBCC showcontig DBCCC indexdefrag DBCC showcontig DBCC SHOWCONTIG scanning 'tablica' table... Table: 'tablica' (2073058421); index ID: 1, database ID: 6 TABLE level scan performed. Pages Scanned: 3 Extents Scanned: 2 Extent Switches: 1 Avg. Pages per Extent: 1.5 Scan Density [Best Count:Actual Count]: 50.00% [1:2] Logical Scan Fragmentation 0.00% Extent Scan Fragmentation: 50.00% Avg. Bytes Free per Page: 246.7 Avg. Page Density (full): 96.95% DBCC execution completed. If DBCC printed error messages, contact your system administrator. 22