我正在編寫一個應用程序,而且我正在使用MySQL作爲DBMS,我們正在下載物業優惠,並且出現了一些性能問題。舊的建築看起來像這樣: 屬性已更新。如果受影響的行數不是1,那麼更新不會被視爲成功,否則更新查詢將解決我們的問題。 如果更新不成功,並且受影響的行數大於1,則我們有重複項,我們將其全部刪除。如果更新不成功,如果需要刪除重複項,則會發生插入操作。此架構運行良好,但存在一些速度問題,因爲如果15天內未更新,屬性將被刪除。 理論上主要的問題是刪除屬性,因爲一些屬性在幾個月內仍然存在,並且索引距離很遠(我們正在談論500,000多個屬性)。是否替換成有where子句?
我們的主人告訴我使用replace into而不是刪除屬性,所有不贊成使用的屬性應該被視爲DEAD。我已經這樣做了,但是由於語法錯誤而開始出現問題,我找不到任何用where子句替換的例子(我想用新屬性替換DEAD屬性而不是刪除舊的財產和插入一個新的確保優化)。我的查詢是這樣的:
replace into table_name(column1, ..., columnn) values(value1, ..., valuen) where ID = idValue
當然,我計算idValue和處理一切,但我有一個語法錯誤。我想知道,如果我錯了,並有一個替代成where子句。
我發現了一種替代解決方案,它比替換成(僅使用更新查詢)更好,因爲如果使用替換,刪除會發生在窗簾後面,但是我想知道是否我錯了當我說替換成沒有where子句的時候。欲瞭解更多參考,請參閱以下鏈接:
http://dev.mysql.com/doc/refman/5.0/en/replace.html
謝謝你的答案提前, 阿帕德·拉約什
非常感謝您的回答。事實上,這是一個矯枉過正,你是絕對正確的,我只是想知道,如果插入有一個where子句來過濾要替換的東西,因爲我們的主機說它有,我想澄清一下(如果我已經找到出於此我沒有看到有理由不告訴他) REPLACE [LOW_PRIORITY | DELAYED] [INTO] tbl_name [(col_name,...)] SELECT ... 如果我理解正確,那麼上面的語法就是,在哪裏說出哪裏可能出現。你說的對,但是,where子句在select – 2010-06-09 16:20:21
而且替換成沒有在那裏的例子,所以,我認爲替換成沒有的地方。 – 2010-06-09 16:58:56