MySQLメモリテーブルの使い方


まず、メモリ・テーブルとは何か、メモリ・テーブルとは、データベース・テーブル全体がメモリに常駐しているテーブルを指し、メモリ・テーブルは通常のテーブルに対してメモリに格納され、通常のテーブルはハード・ディスクに格納されます.では、メモリメーターにはいったいどんな特徴があるのでしょうか.詳しく分析してみましょう.
1.MySQLメモリテーブルはどのように作成しますか?
まず、メモリテーブルをどのように作成するかを学びましょう.方法は簡単で、普通のテーブルとあまり差がありません.唯一の違いは、メモリテーブルが使用するデータベースエンジンがメモリです.次のようになります.
CREATE TABLE `test` (
  `id` char(5) NOT NULL,
  `username` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MEMORY DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

私たちの普通のテーブルのエンジンは一般的にInnoDBで、メモリテーブルを使うには、エンジンをMEMORYに設定しなければなりません.メモリテーブルの構造はディスクに格納、拡張子は.frmなので、再起動は失われません.ただし、データはメモリに格納されているため、再起動するとテーブルデータはすべて失われます.
2.MySQLメモリテーブルにはいったいどんな制限がありますか?
データベース・テーブルを普段設計しているときにvarcharタイプを好む習慣がある場合は、メモリ・テーブルを使用するときは、細部に注意する必要があります.メモリを使用する前に、メモリを申請する必要があることはよく知られています.つまり、メモリテーブルは作成後、各行で使用するメモリが固定されていますが、varcharタイプは動的可変長で、上限値が1つしかありません.メモリテーブルはどのようにしますか.まず、次の例を見てみましょう.
上記の表を例にとると、このような2つの記録があります.
10000,'hellowrold!'  
10001,'hey!'
一般テーブル占有スペース->10000,'hellowrold!'+10001,'hey!'
メモリテーブルの空き容量->10000,'hellowrold!   '+10001,'hey!          '
上記の比較から分かるように、メモリテーブルにvarcharタイプが使用されている場合、テーブルが作成されるとvarcharの最大の長さでメモリが申請され、設計長さが不合理な場合、メモリの浪費になります.また、メモリテーブルがBLOBやTEXTタイプをサポートしていない理由も理解できます.メモリ・テーブルはトランザクションをサポートしません.メモリ・テーブルはテーブル・ロックなので、頻繁に変更するとテーブルのパフォーマンスに影響します.
また、テーブルサイズの問題ですが、メモリテーブルの大きさはどれくらいですか?理論的には、メモリが十分な大きさであれば、テーブルはどれだけ大きくなりますが、デフォルトのメモリテーブルのデフォルトのサイズは64 MB(私が間違っていなければ)、私たちが自分のサイズに設定するにはmyが必要です.cnfファイルでmax_を変更heap_table_sizeパラメータは、修正が完了したらMySQLを再起動してから有効になります.もし私たちのテーブルがいっぱいになったら、MySQLはデータをハードディスクに保存するのではなく、すでにいっぱいになったエラーを直接レポートします.
3.メモリ・テーブルを使用する場合、どのような操作に注意する必要がありますか?
私は前に100 GBのメモリでテストをして、35枚の表を建てて、その中の1枚の表は大体30 GBぐらいのデータを挿入して、その他の34枚の表は平均1 GB未満のデータで、それから私は30 GBの表の中でturncateの操作をして、しばらくカードをかけた後、操作は成功して、しかしその他の34枚の表も影響を受けて、データは意外にもすべてなくなりました!そこで私はまた前回のデータを挿入し続け、34枚の表のいずれかの表に対してturncate操作をしたが、今回は影響がなかった.メモリの占有量が大きすぎると、何か予想できないことが起こるのではないかと推測したが、これはRHELで発生したもので、具体的に何が原因なのかはよく分からない.
その後、delete、update文を使って正常に使用しようとしましたが、表ロックメカニズムなので、実際に使用する過程で、操作表の前後順序にも注意して、読むか書くかを保証する時、他の接続操作がなくて表をロックしました.そうしないと、あなたの操作が失敗することに気づきます.MySQLは表がロックされていることを教えてくれません.この時は自分の直感で時計の鍵かどうかを判断するしかありません.
はい、しばらくはこれだけですが、何か間違っているところがあれば、指摘、検討を歓迎します.月曜日は吼えてこそ、勢いがあります.少なくともサツマイモを鎮めることができます.嗷~~~~