Sto scrivendo un'applicazione e sto usando MySQL come DBMS, stiamo scaricando offerte di proprietà e ci sono stati alcuni problemi di prestazioni. La vecchia architettura assomigliava a questa: Una proprietà è aggiornata. Se il numero di righe interessate non è 1, l'aggiornamento non viene considerato corretto, quindi la query di aggiornamento risolve il problema. Se l'aggiornamento non ha avuto esito positivo e il numero di righe interessate è superiore a 1, abbiamo duplicati e li cancelliamo tutti. Dopo aver eliminato i duplicati, se necessario, se l'aggiornamento non ha avuto esito positivo, si verifica un inserimento. Questa architettura funzionava bene, ma c'erano alcuni problemi di velocità, perché le proprietà venivano eliminate se non venivano aggiornate per 15 giorni. In teoria il problema principale è l'eliminazione delle proprietà, perché alcune proprietà sono vive per mesi e gli indici sono molto distanti tra loro (stiamo parlando di oltre 500.000 proprietà).Sostituisce in avere una clausola where?
Il nostro ospite mi ha detto di usare sostituire in invece di eliminare proprietà e tutte le proprietà obsoleti devono essere considerati come morto. Ho fatto questo, ma i problemi hanno iniziato a verificarsi a causa di un errore di sintassi e non sono riuscito a trovare un esempio di sostituzione con una clausola where (vorrei sostituire una proprietà DEAD con la nuova proprietà invece di eliminare il vecchio proprietà e inserirne una nuova per assicurare l'ottimizzazione). La mia domanda si presentava così:
replace into table_name(column1, ..., columnn) values(value1, ..., valuen) where ID = idValue
Naturalmente, ho calcolato idValue e gestito tutto, ma ho avuto un errore di sintassi. Vorrei sapere se ho torto e c'è una clausola where in cui sostituire.
Ho trovato una soluzione alternativa, che è anche meglio di sostituirla (usando semplicemente una query di aggiornamento) perché le eliminazioni avvengono dietro le tende se uso la sostituzione, ma vorrei sapere se ho torto quando dico che sostituire in non ha una clausola where. Per ulteriori di riferimento, si veda questo link:
http://dev.mysql.com/doc/refman/5.0/en/replace.html
Grazie per le vostre risposte in anticipo, Lajos Árpád
La ringrazio molto per la risposta. In effetti è un eccesso, hai assolutamente ragione, voglio solo sapere se inserire ha una clausola where per filtrare cosa sostituire, perché il nostro ospite ha detto che ha e vorrei chiarire la questione (Se ho già trovato fuori questo non vedo un motivo per non dirglielo) SOSTITUIRE [LOW_PRIORITY | DELAYED] [INTO] nome_tbl [(nome_col, ...)] SELEZIONA ... Se ho capito correttamente, la sintassi sopra è, dove dici che un dove potrebbe apparire. Hai ragione su questo, tuttavia, la clausola where è nella select –
E la sostituzione in non ha un dove nell'esempio, quindi, penso che la sostituzione in non ha un dove. –