日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 内存表使用教程_MySQL的内存表的基础学习教程

發布時間:2023/12/15 数据库 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 内存表使用教程_MySQL的内存表的基础学习教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

內存表,就是放在內存中的表,所使用內存的大小可通過My.cnf中的max_heap_table_size指定,如max_heap_table_size=1024M,內存表與臨時表并不相同,臨時表也是存放在內存中,臨時表最大所需內存需要通過tmp_table_size = 128M設定。當數據超過臨時表的最大值設定時,自動轉為磁盤表,此時因需要進行IO操作,性能會大大下降,而內存表不會,內存表滿后,會提示數據滿錯誤。

臨時表和內存表都可以人工創建,但臨時表更多的作用是系統自己創建后,組織數據以提升性能,如子查詢,臨時表在多個連接之間不能共享。這里只討論內存表

創建表是,用engine=heap可創建(mysql5.5中已經不支持type,以后都用engine,形成習慣)。 create table test

(

id int unsigned not null auto_increment primary key,

state char(10),

type char(20),

date char(30)

)ENGINE=MEMORY DEFAULT CHARSET=utf8;

內存表的特性

1.對于varchar等變長類型,內存表使用固定的長度來存放;

2.內存表可以有非唯一鍵;

3.內存表不能包含BLOB或者TEXT列;

4.內存表支持AUTO_INCREMENT列;

5.內存表支持插入延遲,使讀取優先;

6.非臨時內存表和其它非內存表一樣在所有客戶端直接共享;

我們使用內存表的時候,需要注意以下幾個方面:

1.服務器內存足夠大;

2.我們創建的內存表和MySQL內部臨時表有所不同:

內存表的數據存放在內存中,而內部臨時表(我們的query語句產生的)在恰當的時候存放在內存中,當內部臨時表變得很大時,MySQL會自動地把它轉化為 在磁盤上存儲的表,而我們創建的內存表,卻不會自動轉換。

3.當我們單獨地delete from 某個內存表的時候,不會回收內存;只有當整個表被delete的時候,才會回收內存;

4.在MySQL的主從服務器上,內存表可以被復制

內存表的一些使用限制

MySQL內存表使用哈希散列索引把數據保存在內存中,因此具有極快的速度,適合緩存中小型數據庫,但是使用上受到一些限制。

1、heap對所有用戶的連接是可見的,這使得它非常適合做緩存。

2、僅適合使用的場合。heap不允許使用xxxTEXT和xxxBLOB數據類型;只允許使用=和<=>操作符來搜索記錄(不允許& lt;、>、<=或>=);不支持auto_increment;只允許對非空數據列進行索引(not null)。

注:操作符 “<=>” 說明:NULL-safe equal.這個操作符和“=”操作符執行相同的比較操作,不過在兩個操作碼均為NULL時,其所得值為1而不為NULL,而當一個操作碼為NULL時,其所得值為0而不為NULL。

3、一旦服務器重啟,所有heap表數據丟失,但是heap表結構仍然存在,因為heap表結構是存放在實際數據庫路徑下的,不會自動刪除。重啟之后,heap將被清空,這時候對heap的查詢結果都是空的。

4、如果heap是復制的某數據表,則復制之后所有主鍵、索引、自增等格式將不復存在,需要重新添加主鍵和索引,如果需要的話。

5、對于重啟造成的數據丟失,有以下的解決辦法:

a、在任何查詢之前,執行一次簡單的查詢,判斷heap表是否存在數據,如果不存在,則把數據重新寫入,或者DROP表重新復制某張表。這需要多做一次查詢。不過可以寫成include文件,在需要用該heap表的頁面隨時調用,比較方便。

b、對于需要該heap表的頁面,在該頁面第一次且僅在第一次查詢該表時,對數據集結果進行判斷,如果結果為空,則需要重新寫入數據。這樣可以節省一次查詢。

c、更好的辦法是在mysql每次重新啟動時自動寫入數據到heap,但是需要配置服務器,過程比較復雜,通用性受到限制。

藍草目前采用的是第二種辦法。

6、一些預期可能用到的sql語句 //如果表存在,則刪除

DROP TABLE IF EXISTS `abc`;

//復制整張表xyz為heap表abc(包含所有數據)

CREATE TABLE `abc` type=heap select * from `xyz`;

//添加主鍵id

ALTER TABLE `abc` ADD PRIMARY KEY (`id`);

//添加索引username

ALTER TABLE `abc` ADD INDEX `abc` (`username`);

總結

以上是生活随笔為你收集整理的mysql 内存表使用教程_MySQL的内存表的基础学习教程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。