MySQL提供多種存儲引擎,其中MyISAM、InnoDB和Memory是最常用的三種。Memory引擎將數據存放在內存中,讀寫速度極快但重啟後數據丟失,適合臨時表或緩存場景,後文將專門介紹。
SELECT COUNT(*)需全表掃描採用主從複製拓撲,主庫處理寫操作(INSERT/UPDATE/DELETE),從庫分擔讀查詢(SELECT)。通過中間件或應用層路由實現流量分發,顯著降低主庫壓力,提升查詢響應速度。
垂直拆分(按業務拆庫/拆表):將大庫拆分為多個小庫,大表拆分為多個小表。例如將用戶、訂單、商品拆分到不同數據庫,或將大表的冷熱數據分離。
水平拆分(分庫分表):按範圍、哈希或一致性哈希將同一張表的數據分散到多個表/庫中。單表超過2000萬行時,MySQL性能會明顯下降,分表可將單表數據量控制在合理範圍。
長事務持有鎖時間過長,導致其他會話等待甚至超時。優化方向:縮短事務邏輯、避免事務中調用外部服務、合理設置鎖等待超時時間。
高併發更新同一行記錄(如庫存扣減)會產生嚴重鎖等待。解決方案:Redis/Memcached緩存非持久化計數器、異步寫入數據庫、樂觀鎖機制。
緩存層(Memcached/Redis)無鎖特性,可完美解決上述兩類瓶頸,是高併發架構必備組件。