熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> MySQL >> 正文

MySQL數據庫性能優化的實際操作方案[2]

2013-11-23 21:11:22  來源: MySQL 

    SELECT * FROM customerinfo WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo )

    如果使用連接(JOIN) 來完成這個查詢工作速度將會快很多尤其是當salesinfo表中對CustomerID建有索引的話MySQL數據庫性能將會更好查詢如下

    SELECT * FROM customerinfo LEFT JOIN salesinfoON customerinfoCustomerID=salesinfo CustomerID WHERE salesinfoCustomerID IS NULL

    連接(JOIN) 之所以更有效率一些是因為 MySQL不需要在內存中創建臨時表來完成這個邏輯上的需要兩個步驟的查詢工作

    使用聯合(UNION)來代替手動創建的臨時表

    MySQL 從 的版本開始支持 UNION 查詢它可以把需要使用臨時表的兩條或更多的 SELECT 查詢合並的一個查詢中在客戶端的查詢會話結束的時候臨時表會被自動刪除從而保證數據庫整齊高效

    使用 UNION 來創建查詢的時候我們只需要用 UNION作為關鍵字把多個 SELECT 語句連接起來就可以了要注意的是所有 SELECT 語句中的字段數目要想同下面的例子就演示了一個使用 UNION的查詢

    SELECT Name Phone FROM client UNION SELECT Name BirthDate FROM author

    UNION

    SELECT Name Supplier FROM product

    事務

    盡管我們可以使用子查詢(SubQueries)連接(JOIN)和聯合(UNION)來創建各種各樣的查詢但不是所有的數據庫操作都可以只用一條或少數幾條SQL語句就可以完成的更多的時候是需要用到一系列的語句來完成某種工作但是在這種情況下當這個語句塊中的某一條語句運行出錯的時候整個語句塊的操作就會變得不確定起來

    設想一下要把某個數據同時插入兩個相關聯的表中可能會出現這樣的情況第一個表中成功更新後數據庫突然出現意外狀況造成第二個表中的操作沒有完成這樣就會造成數據的不完整甚至會破壞數據庫中的數據

    要避免這種情況就應該使用事務它的作用是要麼語句塊中每條語句都操作成功要麼都失敗換句話說就是可以保持數據庫中數據的一致性和完整性事物以BEGIN 關鍵字開始COMMIT關鍵字結束在這之間的一條SQL操作失敗那麼ROLLBACK命令就可以把數據庫恢復到BEGIN開始之前的狀態

[]  []  []  []  []  []  


From:http://tw.wingwit.com/Article/program/MySQL/201311/29746.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.