簡體   English   中英

我應該使用 MEMORY (HEAP) 引擎還是 MyISAM 引擎創建 Mysql 表?

[英]Should I create a Mysql table using a MEMORY (HEAP) engine or MyISAM engine?

我想提高在 1 GB 大小的 MySQL MyISAM 表上運行的某些數據庫查詢的速度。

該表有大約 1000 萬行,大約有十列 INT 和 VARCHAR。 該表僅用於讀取,不會更新或插入表。 我在桌子上做的唯一查詢是:

SELECT name,age FROM myisamtable WHERE category1='example' AND (category2='example2' OR category4='example4') ORDER BY id DESC LIMIT 1000,2000

我應該將表轉換為內存以獲得更快的性能嗎? (我不在乎我是否在系統重啟時丟失了表)。 或者最好將其保留為 MyISAM 並增加一些設置,例如密鑰緩沖區大小等。

如果你把整個表放在內存中,你不查詢的任何行仍然會消耗空間。 我想您不太可能確定總是查詢所有行。 OTOH,您執行的任何查詢都將被緩存(只要您分配內存表所需的內容來緩存。

內存表適用於非常不尋常的情況; 將它們用於手動分配的查詢緩存不太可能有成效。


我希望這也是一個易於測試的情況,因為它似乎是您當前遇到的查詢問題。 另一個描述情況的問題怎么樣?


我質疑 InnoDB。 根據我的經驗,MyISAM 表對於隱式只讀表非常有效。 他們糟糕的地方是釋放和重用磁盤塊以及處理相關的索引。


臨時表是一種反模式。 搜索查詢優化策略和消除臨時表(自動或手動)始終是首要任務之一。 當有人發現它們有幫助時,通常表明還有其他重要的改進需要進行

據我所知,如果內存不足,存儲在 MEMORY 中的表將被截斷。

您可以做的是使用 WHERE 語句中定義的子集創建一個臨時表,並使用臨時表執行順序查詢。 我注意到性能的顯着提高。

使用redis 之類的東西非常適合這種鍵值存儲需求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM