Download de presentatie
De presentatie wordt gedownload. Even geduld aub
GepubliceerdAnke de Coninck Laatst gewijzigd meer dan 9 jaar geleden
1
ANALYSE 3 INFANL01-3 WEEK 7 01-02-2014 CMI Informatica
2
ANALYSE 3- INFANL01-3 ▸ Vorige les ▸ Autorisatie ▸ Query optimalisatie (indexes, explain, explain extended) ▸ Optimaliseren van instructies
3
VORIGE LES
4
Subqueries Inleiding Single-row Muliple-row (vs JOINs) Correlated
5
Subqueries (single-row)
6
Subqueries (multiple-row) Multiple-row subqueries zijn gebaseerd op de vergelijkingsoperatoren (IN, ANY, EXISTS, ALL) Het resultaat van de subquery is meer dan een rij Afhankelijk van de operator zijn er verschillende resultaten bij NULL
7
Voorbeeld: SELECT … FROM … WHERE IN IN : WHERE IN IN wordt gebruikt in WHERE (rij-voorwaarde) om de rijen te selecteren met een attribuut-waarde die voorkomt in de verzameling attribuut waarden. kan een letterlijk lijstje zijn (1,2,3) of het resultaat van een SELECT SELECT * FROM spelers WHERE spelersnr IN (1,2,3); SELECT naam AS aanvoerder FROM spelers WHERE spelersnr IN (SELECT spelersnr FROM teams);
8
Subqueries (correlated) Correlated subquery is een subquery die waarden gebruikt van de outer-query. De subquery wordt eenmaal geëvalueerd voor elk rij van de outer-query.
9
VIEWs Wat is een VIEW? een view is een ‘virtuele’ tabel, die is gebaseerd op ‘echte’ basistabellen (dwz tabellen die gegevens bevatten) Waarom VIEWs? VIEWs kunnen worden gebruikt om gegevens uit verschillende tabellen te halen. Gebruikers kunnen dezelfde data op verschillende manieren zien. VIEWs bieden groepen gebruikers toegang tot gegevens op basis van hun permissies of criteria
10
Hoe definieer je een VIEW? (voorbeelden) CREATE VIEW wedstrijdspelers AS SELECT * FROM spelers WHERE bondsnr IS NOT NULL; CREATE VIEW aanvoerders AS SELECT naam, teamnr, divisie FROM spelers,teams WHERE spelers.spelersnr=teams.spelersnr;
11
VIEWs VIEWs zijn altijd actueel wijzigingen in onderliggende tabellen zijn direct in een VIEW terug te zien Sommige VIEWs zijn wijzigbaar. Dat wil zeggen, je kunt ze gebruiken in queries als UPDATE, DELETE Voorwaarde: er moet een één-op-één relatie tussen de rijen in het VIEW en de rijen in de onderliggende tabel. Heeft een view een één-op-één relatie als deze constructies gebruikt? Aggregate functions (SUM(), MIN(), MAX(), COUNT(), enz.) DISTINCT GROUP BY HAVING Enz.
12
Transactie Een transactie bestaat uit een aantal samenhangende wijzigingen in een database, waarbij ervoor gezorgd wordt dat deze wijzigingen ofwel allemaal plaatsvinden, ofwel geen van alle. Een transactie bestaat uit de volgende instructies: START TRANSACTION: Begint een transactie COMMIT: representeert de tijdspunt waar de het resultaat van de transactie opgeslagen kan worden en het eind van de transactie ROLLBACK: verwijdert alle verandering aan de data tot een bepaalde tijdspunt of tot het begin van de transactie SAVEPOINT: een markeringstijdspunt binnen de transactie
13
Voorbeeld Welke data worden opgeslagen in de tabel myTable na deze transaction? 1. START TRANSACTION; 2. INSERT INTO myTable(col1, col2) VALUES(10, 10); 3. SAVEPOINT my_savepoint_1; 4. INSERT INTO myTable(col1, col2) VALUES(20, 20); 5. SAVEPOINT my_savepoint_2; 6. INSERT INTO myTable(col1, col2) VALUES(30, 30); 7. ROLLBACK TO SAVEPOINT my_savepoint_1; 8. INSERT INTO myTable(col1, col2) VALUES(40, 40); 9. COMMIT;
14
AUTORISATIE
15
Privileges op databases Data beveiliging is essentieel voor organisaties Er zijn twee soorten beveiligingen voor databases Systeem beveiliging Aanmaken van users, wachtwoorden enz. Data beveiliging Welke operaties mag een user doen op een bepaalde tabel of een view Implementatie kan verschillen per soort database
16
Rollen vs Users (systeem beveiliging) ▸ Database systemen geven de mogelijkheid om users aan te maken ▸ CREATE USER username ▸ RENAME USER username TO username2 ▸ DROP USER username ▸ Postgres en Oracle gebruiken het concept ROLE ▸ Een ROLE kan een gebruiker zijn maar ook een groep van gebruikers
17
Privileges (data beveiliging) Rechten toekennen: GRANT [type van permissie ] ON [database naam].[tabel name] FROM [gebruikersnaam] Rechten verwijderen GRANT [type van permissie ] ON [database naam].[tabel name] FROM [gebruikersnaam] Typen van permissies: CREATE: geeft de gebruiker aanmaak rechten voor tabellen of DROP: geeft de gebruiker verwijder rechten voor tabellen of databases DELETE: geeft de gebruiker verwijder rechten voor rijen INSERT: geeft de gebruiker verwijder rechten voor rijen SELECT: geeft de gebruiker leesrechten op tabellen UPDATE: geeft de gebruiker wijzigrechten op rijden GRANT OPTION: gebruiker kan andere gebruikers aanmaken en verwijderen ALL PRIVILEGES
18
Veiligheid - Bad practices ▸ Slecht gebruik om maar 1 user te gebruiken voor alles ▸ De ware identiteit is vaak niet terug te herleiden op de persoon ▸ (bv root -> wie is dat?) ▸ Wie heeft mijn tabellen verwijderd!?!?! ▸ Vaak zijn database-users hyper-privileged ▸ Gebrek aan of luie DB-ADMINS / configuratie managers ▸ erg lastig om permissies langdurig te beheren (wanneer mag iemand minder?) ▸ 3 rd party code is ‘eigenaar’ (maker) van het schema/db
19
Maak je DB ‘nooit’ publiekelijk beschikbaar ▸ Databases horen niet publiekelijk bereikbaar te zijn ▸ Best/better practice ▸ root account alleen vanaf 127.0.0.1 ▸ Als het moet, dan read-only user voor public access ▸ Veel diagnostische tools beschikbaar (bv SQLMAP)
20
SEQUENCES
21
In standaard SQL Een sequence: databaseobject reeks nummers genereren Let op! veel varianten MySQL gebruikt de attribute AUTO_INCREMENT ipv. SEQUENCES CREATE TABEL table( id INT AUTO_INCREMENT, naam VARCHAR(10) NOT NULL)
22
SEQUENCES Een alternatief voor de SEQUENCE is het concept van de IDENTITY.
23
SEQUENCES Vuistregels: Gebruik voor iedere tabel een eigen sequence Gebruik per tabel maximaal 1 sequence Sequence = PK = NOT NULL
24
INDEX
25
Inleiding Stel data van de tabellen customers en orders beschikken over veel rijen We willen het resultaat van deze query sneller maken SELECT * FROM customers, orders WHERE customers.customerNumber = orders.customerNumber; Wat zijn de mogelijkheden om het resultaat sneller te krijgen?
26
Index ▸ Een index wordt gebruikt in twee gevallen: ▸ Om de performance van een SELECT query te verbeteren ▸ Unieke waarden te waarborgen ▸ Een index bestaat uit waarden van kolommen en een verwijs naar de rij in de tabel ▸ Een index is logisch en fysiek onafhankelijk van een tabel ▸ Ze kunnen aangemaakt en verwijdert worden zonder een effect te hebben op de data ▸ Een index wordt op een kolom of meerdere kolommen aangemaakt
27
Index typen Uniek Databases maken automatisch een index aan voor kolommen die PRIMARY KEY of UNIQUE constraint zijn Niet uniek Indexes kunnen manueel aangemaakt worden Je kan bijvoorbeeld een index aanmaken op FOREIGN KEY kolom om het zoeken naar rijen te verbeteren Bij een composite index is de volgorde van de kolommen van belang. CREATE INDEX indexnaam ON tabelnaam(col1,col2,…)
28
Gebruik van indexes ▸ Wanneer toe te passen ▸ Een of meerdere kolommen worden vaak gebruikt ▸ Bijvoorbeeld bij WHERE of JOIN ▸ Andere redenen? ▸ Nadelen van indexes ▸ Als je verschillende DML operaties (INSERT,DELETE,UPDATE) toepast, dan wordt je index ook geactualiseerd => performance impact
29
QUERY OPTIMALISATIE
30
Optimalisatie factoren Deze factoren spelen in de regel een rol in de uitvoering van je query Snelheid van je hardschrijf Snelheid van je CPU Snelheid van je memory Snelheid van je netwerk Interne implementatie van de gekozen database server Bijvoorbeeld: instelling van je server (config). Default instellingen leveren niet per definitie optimale performance. Implementatie van je database (indexes, permissies, constraints) Enz.
31
Query evaluatie en uitvoering Hoe gaat de server met queries om? Parsing en vertaling Vertalen van de query naar een interne structuur op basis van een “parse tree” Daarna wordt het vertaald naar relationele algebra expressies Parser checkt de syntax en valideert de relaties, attributen en permissies Evaluatie De zogenaamd “query execution engine” voert alle uitvoeringsplannen uit en levert de resultaten. Elk uitvoeringsplan onderscheidt zich in keuze van de low level operatie Optimalisatie : Welk plan of combinatie van plannen is het snelst
32
Query evaluatie en uitvoering
33
EXPLAIN vs EXPLAIN EXTENDED EXPLAIN SELECT * FROM tbl_name Toont hoe de query wordt uitgevoerd door de server. De query optimizer maakt o.a gebruikt van statistische data over de tabellen (bijv. aantal rijen) De query wordt niet daadwerkelijk uitgevoerd. Output verschilt per database server EXPLAIN EXTENDED SELECT * FROM tbl_name… Toont aanvullend de ingeschatte percentage van de rijen die daadwerkelijk worden gefilterd(specifiek voor MySQL)
34
Analyze ANALYZE TABLE tbl_name ▸ Statistiek over tabellen zoals: ▸ Aantal rijen ▸ Gemiddelde tijd lengte ▸ Statistiek over kolommen zoals ▸ Aantal unieke waarden per kolom ▸ Aantal NULLs per kolom ▸ Er zijn nog meer statistieken die bijgehouden worden dan de bovengenoemde
35
Oefening Stap 1: actualiseer de statistieken van je tabellen ANALYZE TABLE orderdetails Stap 2: voer deze query uit: EXPLAIN SELECT * FROM orderdetails d INNER JOIN orders o ON d.orderNumber = o.orderNumber INNER JOIN products p ON p.productCode = d.productCode INNER JOIN productlines l ON p.productLine = l.productLine INNER JOIN customers c ON c.customerNumber = o.customerNumber WHERE o.orderNumber = 10101 Stap 2: kijk naar de output Stap 3: kijk in de documentatie van je database server naar de interpretatie van de output (bekijk de documentatie van EXPLAIN) Je kan gebruikte indexes verwijderen en de output van je query vergelijken met de vorige
36
Testen
37
Database testen ▸ Waarom wil je testen? ▸ Wat kun je testen en hoe? ▸ Constraints zijn belangrijk om de database te ontwerpen, de mogelijkheid te bieden om de semantiek van de data te bepalen en te waarborgen. ▸ Er zijn vier verschillende integriteit regels voor data: Domein integriteit Entiteit integriteit Referentiele integriteit Gebruiker-specifieke integriteit
38
Domein integriteit ▸ Een domein bepaald de waarde van attributes: ▸ Datatypes en lengte ▸ Null waardes ▸ Toegestane waardes ▸ Standaard waardes CREATE TABLE dbo.Payroll ( ID int PRIMARY KEY, PositionID INT, SalaryType nvarchar(10), Salary decimal(9,2) CHECK (Salary < 150000.00) ); Welke waardes kun je bij salary opslaan?
39
Entiteit integriteit Iedere entiteit moet een attribuut of combinatie van attributen hebben waarmee elk tupel (rij) als uniek en aanwezig te identificeren is. Dat attribuut is de primary key of primaire sleutel.
40
Referentiele Integriteit ▸ spelernsnr in TEAMS verwijst altijd naar een bestaand spelersnr in SPELERS primary keyforeign key
41
Referentiele Integriteit ▸ spelernsnr in TEAMS verwijst altijd naar een bestaand ▸ spelersnr in SPELERS, dus moeten gesynchroniseerd ▸ blijven primary keyforeign key
42
CREATE TABLE teams ( teamnr SMALLINT NOT NULL, spelersnrSMALLINT NOT NULL, divisieCHAR(6) NOT NULL, PRIMARY KEY (teamnr), FOREIGN KEY (spelersnr) REFERENCES spelers (spelersnr) ); Referentiele Integriteit : referenties aangeven bij CREATE
43
Referentiele Integriteit refererende acties ▸ default (SOLID): ON UPDATE RESTRICT ON DELETE RESTRICT (dwz wijzigen/verwijderen van een spelersnr in de SPELERS tabel wordt tegengehouden als spelersnr in TEAMS voorkomt)
44
Referentiele Integriteit refererende acties ▸ alternatief 1: ON UPDATE CASCADE ON DELETE CASCADE (dwz update/delete van een spelersnr in de SPELERS tabel triggert automatisch een update/delete in TEAMS) ▸ alternatief 2: ON UPDATE SET NULL ON DELETE SET NULL
45
Testverslag Twee soort data gebruiken: Data die voldoet aan de integriteitsregels Data die niet voldoen aan de integriteit regels
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.