標籤:

mysql如何使用臨時表,內存表來加快速度?

1.我結合武俠這個遊戲來說一說我的使用心得:

武俠中所有玩家當前所在場景信息存在內存表中,比如A場景有a,b,c玩家, B場景中有e,f,g玩家,都存在一個叫做tbl_player_scene的內存表中。當時並不知道redis, 後來想想其實可以用redis的set來替代。

2.內存表的特點:

a. 支持索引。(這個是對比起redis等nosql的殺手鐧)

b. 支持自增長欄位。

c. 查詢緩存

etc

從內存表的特性來看,他的適合場景有:

a. 在開發初期,內存表在和nosql資料庫對比的時候,看查詢的複雜程度,數據的複雜程度來進行權衡。

b. 在後期維護中,可以在非常小的改變原先的代碼結構,比如dao層的代碼,移植成內存表類型。

linux_ubuntu

臨時表將在你連接MySQL期間存在。當你斷開時,MySQL將自動刪除表並釋放所用的空間。當然你可以在仍然連接的時候刪除表並釋放空間。

重起資料庫以後,內存中的數據全部丟失。

1.臨時表:表建在內存里,數據在內存里

2.內存表:表建在磁碟里,數據在內存里

其中包括2個重要的參數

[mysqld]

內存表容量

max_heap_table_size=1024M

臨時表容量

tmp_table_size=1024M

臨時表主要是為了放一些中間大結果集的一些子集,內存表可以放一些經常頻繁使用的數據。

自由者:

以下是對內存表和臨時表之間區別的總結:

內存表:

1. 通過參數控制:max_heap_table_size大小來設定內存表大小

2. 到達max_heap_table_size所設置的內存上限後報錯。

3. 表定義保存在磁碟上,數據和索引保存在內存裡面。

4. 不能包含TEXT、BLOB等欄位。

臨時表:

1. 通過參數控制:tmp_table_size大小來設定臨時表大小。

2. 到達tmp_table_size上限後會在磁碟上創建臨時文件。

3. 表定義和數據都在內存里。

4. 可以包含TEXT, BLOB等欄位。

臨時表一般都很少用,而且要用也一般是在程序中動態創建或者由MySQL內部根據SQL執行計劃需要自己創建。

內存表則大多數是當Cache用,在早期一台機器沒有裝Memcache等第三方cache時,h內存表無疑是cache的最好的選擇了。而如今隨著memcache、NoSQL的流行,內存表就越來越少人使用了


推薦閱讀:

利用主鍵快速聚合單表數千萬MySQL的非索引欄位
4.7 mysql 程序開發工具
許多人沒有理解透徹的一些基礎概念
哪些互聯網公司的資料庫是選擇Oracle的,為什麼?
DAY17:配置mac開發環境

TAG:MySQL |