首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

管理多個MySQL實例的實例管理器(一):列屬性優化、JOIN替代子查詢、UNION替代臨時表

     編輯:MySQL 資料庫相關知識

招數1:選最小充足列類型

  • 郵編CHAR(6)而非CHAR(255)/VARCHAR
  • 整型MEDIUMINT代替BIGINT
  • 可NOT NULL盡量NOT NULL(省NULL判斷)
  • 低基數枚舉型(省份、性別)用ENUM → 內部存數值,**比較/排序極快**

招數2:JOIN替代子查詢

刪除無訂單客戶:

-- 子查詢
DELETE FROM customerinfo WHERE CustomerID NOT IN (SELECT CustomerID FROM salesinfo);

-- LEFT JOIN(salesinfo有索引時極快)
SELECT * FROM customerinfo 
LEFT JOIN salesinfo ON customerinfo.CustomerID = salesinfo.CustomerID 
WHERE salesinfo.CustomerID IS NULL;

原理:JOIN避免內存臨時表,**MySQL 5.6+優化器可將半連接轉為JOIN**,但顯式JOIN更穩健。

招數3:UNION替代手工臨時表

SELECT Name, Phone FROM client
UNION
SELECT Name, BirthDate FROM author
UNION
SELECT Name, Supplier FROM product;
  • 會話結束自動清理臨時結果
  • 所有SELECT**列數必須一致**
  • UNION ALL保留重複行,更快

招數4:事務保證一致性

BEGIN;
INSERT INTO salesinfo SET CustomerID=14;
UPDATE inventory SET Quantity=11 WHERE item='book';
COMMIT;

失敗自動ROLLBACK。併發下利用行鎖隔離,但**長事務殺併發**,權衡使用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved