SELECT * FROM game_shares_buy_list WHERE price >= '2.00' ORDER BY tran_id DESC LIMIT 10;
PRIMARY KEY (tran_id), KEY ind_username (username)
PRIMARY 索引倒序掃描,避免排序price >= 2.00 僅 4,087 行(佔 0.26%),需掃描大量不符合行FORCE INDEX(ind_game_shares_buy_list_price) -- 1.01 秒,仍需回表排序
SELECT * FROM game_shares_buy_list t1 JOIN ( SELECT tran_id FROM game_shares_buy_list WHERE price >= '2.00' ORDER BY tran_id DESC LIMIT 10 ) t2 ON t1.tran_id = t2.tran_id; -- 0.00 秒
原理:子查詢僅掃描 price 索引取 10 個 ID,外層主鍵點查 10 次,避免大量回表與排序。
PRIMARY KEY (session_id) -- VARCHAR(255) UTF8 session_data TEXT
TEXT 欄位無法放入覆蓋索引,查詢必須回表INSERT 造成頁分裂與鎖競爭CREATE TABLE game_session ( id INT AUTO_INCREMENT PRIMARY KEY, -- 4 字節整數主鍵 session_id VARCHAR(30) CHARSET utf8 COLLATE utf8_bin NOT NULL, session_expires INT UNSIGNED NOT NULL DEFAULT 0, client_ip VARCHAR(16), session_data VARCHAR(200), -- TEXT → VARCHAR 可入索引 KEY ind_session_id (session_id, session_data, session_expires) -- 覆蓋索引 ) ENGINE=InnoDB;
session_data, session_expires 走覆蓋索引,零回表