InnoDB 支援 MVCC,COUNT(*) 只能返回近似值(有並行事務未提交/回滾)。生產環境避免直接用 COUNT(*) 做精確統計。
查詢優化必須在上萬/百萬級真實資料量下測試,開發環境少量資料無法暴露全表掃描、鎖競爭等問題。
最直接手段:建立合適索引。但索引非越多越好,寫入開銷與優化器誤判風險隨索引數增加。
CREATE TABLE awesome_pcq (
emp_id INT(10) NOT NULL DEFAULT 0 PRIMARY KEY,
full_name VARCHAR(100) NOT NULL,
email_id VARCHAR(100) NOT NULL,
password VARCHAR(50) NOT NULL,
deleted TINYINT(4) NOT NULL
) ENGINE=InnoDB;
查詢:SELECT emp_id FROM awesome_pcq WHERE email_id='x' AND password='y' AND deleted=0
EXPLAIN 顯示 rows=100(全表掃描)。
加索引:ALTER TABLE awesome_pcq ADD INDEX LoginValidate (email_id);
再次 EXPLAIN → rows=1,僅掃描 1 行。MySQL 優化器會自動利用 WHERE 條件中有索引的欄位先過濾。