私のプラットフォーム:
PHP と MySQL
私の状況:
テーブルの列の 1 つにユーザー選択の値を保存する必要のある状況に遭遇しました。この場合、次のオプションが考えられます。
- 列をchar(1)として宣言し、値を「y」または「n」として保存します。
- または、列をtinyint(1)として宣言し、値を1または0として保存します。
- このように宣言された列は、アプリケーション内で使用するためにインデックス付けされる場合もあります。
私の質問:
そこで、上記の 2 つのタイプのうちどちらなのかを知りたいと思いました。
その列にアクセスすると、クエリ速度が速くなります (簡単にするために、他のクエリの混在や他の列へのアクセスは省略します)。
最も効率的なデータの保存とアクセスの方法は何ですか? また、その理由は何ですか?
列にインデックスが付けられている場合と付けられていない場合では、アクセス速度はどのように変化しますか?
私の理解では、char(1) と tinyint(1) は 1 バイトのスペースしか占有しないので、この場合、ストレージ スペースは問題になりません。残るのはアクセス速度です。私の知る限り、数値インデックスは他の何よりも高速で効率的です。しかし、この場合の判断は難しいと思います。この件について、ぜひあなたの経験を聞かせてください。
よろしくお願いします。
ベストアンサー1
Rate insert tinyint(1) insert char(1) insert enum('y', 'n')
insert tinyint(1) 207/s -- -1% -20%
insert char(1) 210/s 1% -- -19%
insert enum('y', 'n') 259/s 25% 23% --
Rate insert char(1) insert tinyint(1) insert enum('y', 'n')
insert char(1) 221/s -- -1% -13%
insert tinyint(1) 222/s 1% -- -13%
insert enum('y', 'n') 254/s 15% 14% --
Rate insert tinyint(1) insert char(1) insert enum('y', 'n')
insert tinyint(1) 234/s -- -3% -5%
insert char(1) 242/s 3% -- -2%
insert enum('y', 'n') 248/s 6% 2% --
Rate insert enum('y', 'n') insert tinyint(1) insert char(1)
insert enum('y', 'n') 189/s -- -6% -19%
insert tinyint(1) 201/s 7% -- -14%
insert char(1) 234/s 24% 16% --
Rate insert char(1) insert enum('y', 'n') insert tinyint(1)
insert char(1) 204/s -- -4% -8%
insert enum('y', 'n') 213/s 4% -- -4%
insert tinyint(1) 222/s 9% 4% --
ほとんどの場合、enum('y', 'n')
挿入する方が速いようです。
Rate select char(1) select tinyint(1) select enum('y', 'n')
select char(1) 188/s -- -7% -8%
select tinyint(1) 203/s 8% -- -1%
select enum('y', 'n') 204/s 9% 1% --
Rate select char(1) select tinyint(1) select enum('y', 'n')
select char(1) 178/s -- -25% -27%
select tinyint(1) 236/s 33% -- -3%
select enum('y', 'n') 244/s 37% 3% --
Rate select char(1) select tinyint(1) select enum('y', 'n')
select char(1) 183/s -- -16% -21%
select tinyint(1) 219/s 20% -- -6%
select enum('y', 'n') 233/s 27% 6% --
Rate select tinyint(1) select char(1) select enum('y', 'n')
select tinyint(1) 217/s -- -1% -4%
select char(1) 221/s 1% -- -2%
select enum('y', 'n') 226/s 4% 2% --
Rate select char(1) select tinyint(1) select enum('y', 'n')
select char(1) 179/s -- -14% -20%
select tinyint(1) 208/s 17% -- -7%
select enum('y', 'n') 224/s 25% 7% --
選択することもそうですenum
。コードはここで見つかりました