Università degli Studi di Modena e
Reggio Emilia
Facoltà di Ingegneria di Modena
Corso di Laurea in Ingegneria Informatica
Confronto dei DBMS RELAZIONALI
SQLServer e MySQL
Relatore:
Prof. Sonia Bergamaschi
Correlatore:
Ing. Maurizio Vincini
Candidato:
Luca Sculco
1
Obiettivi
- confronto dei tempi di risposta a diversi tipi di query:
tabelle piccole, medie e grandi dimensioni
join fra più tabelle
join fra più tabelle indicizzate
- guadagno di tempo con indici
- scelta del DBMS
2
Query su singola tabella
- 3 tipi di query: 20%, 50%, 80%
- 4 tabelle di diversa grandezza:
numero di tuple
21000
4000
10500
17000
84000
16000
42000
68000
147000
28000
73500
119000
210000
40000
105000
170000
3
Tempi di risposta (a)
1 – query “senza cache” su singola tabella
SQLServer
600
900
800
700
500
tempo in ms
MySQL
400
600
500
400
300
200
100
0
4000
10500
17000
300
200
100
0
numero di record
16000
42000
68000
40000
105000
170000
1600
1200
1400
1000
1200
800
1000
600
800
600
400
400
200
200
0
0
28000
73500
119000
4
Tempi di risposta (b)
2 – query “con cache” su singola tabella
SQLServer
140
tempo in ms
120
100
80
60
40
20
0
4000
10500
17000
MySQL
500
450
400
350
300
250
200
150
100
50
0
numero di record
16000
42000
68000
40000
105000
170000
1400
900
800
700
600
500
400
300
1200
1000
800
600
400
200
100
0
200
0
28000
73500
119000
5
JOIN a 2 vie (a)
- 2 tabelle:
- operazioni:
esame con 23196 record (tabella esterna)
studente210k con 210000 record (tabella interna)
inner join
23196 record
left join
23196 record
right join
227696 record
full join
227696 record
- FULL JOIN non supportato da MySQL
…..esame left join studente210k…..
UNION
…..esame right join studente210k…..
6
JOIN a 2 vie (b)
SQLServer
4000
3500
3500
3000
2500
3000
tempo in ms
senza
cache
2500
2000
1500
1000
2000
1500
1000
500
500
0
0
JOIN
23196
FULL JOIN
227696
LEFT JOIN
23196
RIGHT JOIN
227696
LEFT JOIN
23196
RIGHT JOIN
227696
2500
3500
3000
con
cache
MySQL
2000
2500
2000
1500
1500
1000
1000
500
500
0
0
JOIN
23196
FULL JOIN
227696
7
JOIN a 3 vie (a)
- 3 tabelle:
corso con 72 record (tabella esterna)
esame con 23196 record (1° tabella interna)
studente210k con 210000 record (2° tabella interna)
- operazioni:
inner join
full join
23196 record
227754 record
8
JOIN a 3 vie (b)
senza
cache
tempo in ms
SQLServer
MySQL
4500
4000
3500
3000
2500
2000
1500
1000
500
0
JOIN
23196
FULL JOIN
227754
JOIN
23196
FULL JOIN
227754
3500
con
cache
3000
2500
2000
1500
1000
500
0
9
JOIN a 4 vie (a)
- 4 tabelle:
corso con 72 record (tabella esterna)
docente con 110 record (1° tabella interna)
esame con 23196 record (2° tabella interna)
studente210k con 210000 record (3° tabella interna)
- operazioni:
inner join
full join
23196 record
227808 record
10
JOIN a 4 vie (b)
senza
cache
con
cache
tempo in ms
SQLServer
MySQL
4500
4000
3500
3000
2500
2000
1500
1000
500
0
JOIN
23196
FULL JOIN
227808
JOIN
23196
FULL JOIN
227808
4000
3500
3000
2500
2000
1500
1000
500
0
11
INDICI: JOIN a 2 vie (a)
- 2 tabelle:
esame con 23196 record (tabella esterna)
studente210k con 210000 record (tabella interna)
ESAME
STUDENTE210K
matricola
corso
data
voto
matricola
nome
cognome
città
acorso
….
….
….
….
….
…..
….
….
….
- Indici clustered su PK: matricola,corso in ESAME
matricola in STUDENTE210K
- select e clausola where nella query:
s.matricola,e.voto,s.città
……
where e.corso=5
2000 record
12
INDICI: JOIN a 2 vie (b)
- Indici unclustered nella tabella ESAME:
A: indice su corso
B: indice su matricola e corso
C: indice su matricola e corso,voto
D: indice su corso,voto
E: nessun indice
SQLServer
MySQL
1200
tempo in ms
1000
800
600
400
200
0
A
B
C
D
numero record 2000
E
13
INDICI: JOIN a 3 vie (a)
- 3 tabelle:
CORSO
corso con 72 record (tabella esterna)
esame con 23196 record (1° tabella interna)
studente210k con 210000 record (2° tabella interna)
codice_corso
nome_corso
docente
….
….
….
- Indici clustered su PK: codice_corso in CORSO
- select e clausola where nella query:
s.matricola,e.voto,c.docente,s.città
……
1002 record
where c.docente=9
14
INDICI: JOIN a 3 vie (b)
- Indici unclustered nella tabella ESAME e CORSO:
F: indici su corso,voto
G: indici su corso,voto e docente
H: nessun indice
SQLServer
MySQL
700
tempo in ms
600
500
400
300
200
100
0
F
G
numero record 1002
H
15
CONCLUSIONI
- prezzo di licenza server
SQLServer2000 da 730 $ a 24000 $
MySQL 5.0 da 600 $ a 5000 $
- piattaforme
SQLServer disponibile solo su Windows
MySQL disponibile sia su Unix che su Windows
Considerate inoltre le prestazioni:
- tempo di risposta elevato per query complesse
- buon tempo di risposta per query semplici
- basso costo di licenza
- scelta del sistema operativo
- prestazioni elevate per qualsiasi query
- costo di licenza non trascurabile
- sistema operativo Windows
MySQL
SQLServer
16
Scarica

Diapositiva 1 - DBGroup - Università degli studi di Modena e Reggio