17

インデックス フィールド、およびハードディスク/RAM 上のスペース トークンに最適なものは何ですか? Biginteger または Varchar(15) ? たとえば、次のようなインデックス番号を使用できます。

from  10000001 to 45281229703 and higher...

しかし、何を選ぶのが良いですか?また、非インデックス フィールドでは、どのフィールド タイプが優れていますか?

4

3 に答える 3

39

BIGINTは常に 8 バイトでVARCHAR(15)あり、値の長さに応じて 1..16 バイトであるためBIGINT、大きい数値では必要なメモリが少なくて済みますが、小さい数値 (7 桁未満) ではより多くのメモリが必要です。また、BIGINT の方が高速です。

于 2013-03-06T07:48:08.617 に答える
14

シミュレーション環境でテストを実行しました。

  1. 1 つの BIGINT と 1 つの VARCHAR パラメータで作成可能。
  2. 30Lac 行を挿入しました。
  3. 両方のフィールドにインデックスを作成しました。
  4. 結果は次のとおりです。BIGINTは、VARCHAR よりも ほぼ 20 倍高速に応答します。

上記の手順を実行するスクリプトは次のとおりです。

Create table r5(mob bigint,m_mob varchar(30));

Create index i_d on r5(mob,m_mob);


do $$
begin
for i in 1..3000000 loop
insert into r5(mob,m_mob) values(i,i||’abc’);
end loop;
end; $$

select * from r5
where mob=2900000;

select * from r5
where m_mob=’2900000abc’;
于 2016-08-24T07:29:40.903 に答える
4

varchar はオーバーヘッドを追加します:

文字列の長さは、フィールドごとに格納する必要があり (MySQL では追加の 2 バイト IIRC)、インデックスでは比較の照合のためにさらに多くの処理が必要です。

于 2013-03-06T07:49:27.137 に答える