mysql如何使用臨時表,內存表來加快速度?
05-12
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 |