2009-05-08 15 views
5

Quando si utilizza MySQL 5.1 Enterprise dopo anni di utilizzo di altri prodotti di database come Sybase, Infomix, DB2; Mi imbatto in cose che MySQL semplicemente non fa. Ad esempio, può solo generare un piano di query EXPLAIN per le query SELECT.Limitazioni di MySQL

Quali altre cose dovrei fare attenzione?

+1

La parola in corsivo "reale" chiuderà questa domanda come soggettiva e argomentativa, tutto da solo. – chaos

+0

ok, cambiato * reale * in closed-source –

+0

Suggerirei di rimuovere completamente quella frase. "anni di utilizzo di prodotti di database come ..." –

risposta

4

Raccordi esterni completi. Ma puoi ancora fare un join esterno destro dell'unione esterna sinistra.

7

Si può dare un'occhiata al lungo elenco qui: MySQL Gotchas

+0

Buona lista, ma potrebbe non essere accurata al 100% per MySQL 5.0. –

+0

a destra, ho chiarito la versione di mysql sopra –

1

Consenti per i ruoli o Gruppi

1

Non costa una fortuna. Prova a creare un sito Web in cluster su più macchine con più core su un database Oracle. Ahia.

1

Ancora non esegue i vincoli CHECK!

2

Una cosa che ho incontrato in un progetto è che i tipi di data di MySQL non possono memorizzare millisecondi. Datetimes e timestamp risolvono solo in secondi! Non riesco a ricordare le circostanze esatte in cui è emerso, ma alla fine ho dovuto memorizzare un int che poteva essere convertito in una data (completa di millisecondi) nel mio codice.

I driver JDBC di MySQL memorizzano i risultati nella cache per impostazione predefinita, al punto che causerà l'esaurimento della memoria del programma (sollevare eccezioni OutOfMemory). È possibile disattivarlo, ma devi farlo passando alcuni parametri inusuali nella dichiarazione al momento della creazione:

Statement sx = c.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,java.sql.ResultSet.CONCUR_READ_ONLY); 
sx.setFetchSize(Integer.MIN_VALUE); 

Se lo fai, il driver JDBC volontà non risultati nella cache in memoria, e si puoi fare query enormi MA e se stai usando un sistema ORM? Non si creano le affermazioni da soli e pertanto non è possibile disattivare la memorizzazione nella cache. Il che significa sostanzialmente che sei completamente fregato se il tuo sistema ORM sta cercando di fare qualcosa che coinvolge un sacco di record.

Se avessero un senso, lo renderebbero configurabile tramite l'URL JDBC. Oh bene.