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