タフの8つの異なる値のみを入力できる3つの列(Title、Tough、Id)を持つ匿名のテーブルがあります。ここで、データベース内のタフの値ごとに8つの異なるテーブルを作成する必要があることを知りたいです。高速SQLクエリ。
4 に答える
私がすべきことは次のとおりです(タイプがであると仮定してVARCHAR
)
2つの列(typeId、type)を持つ1つの新しいテーブルを作成します。次に、匿名テーブルへの参照を配置します。これにより、データストレージが削減され、8つの値を1回キャプチャするだけで済みます。次に、これらの8つの値を参照するために数値のみを使用します。
これによりクエリのパフォーマンスが向上するかどうかはわかりませんが、データベースに含まれる冗長データが大幅に少なくなることは間違いありません。
列、、、およびを含む別のテーブルを作成するよりも、Types
列type_id
とを含むテーブルを作成する必要があります。type_name
anonymous_id
title
type_id
2番目のテーブルでtype_id
は、テーブルの主キー(type_id)にリンクする外部キーになりますTypes
。
これにより、テーブルが最適化され、重複データが少なくなり、データベースにすでに存在するタイプのみを許可できるため、はるかにスケーラブルになります。
引き続き単一のテーブルを使用して、どのように機能するかを確認することをお勧めします。これにより、アプリケーションの構造が簡素化され、さまざまな問題の視界が妨げられなくなります。
ただし、期限が迫っている場合は、アプリケーションの構造と、インデックスがどのように成長するかを考慮する必要があります。アプリケーションを変更するのが面倒な場合は、解決できない問題に発展するまで、すぐにやり直す必要があります。
一般に、データ構造を正規化することを試み、測定によって必要性が示されたら、パフォーマンスについて心配する必要があります。
CREATE TABLE `Anonymous` (
`id` INT NOT NULL AUTO_INCREMENT,
`tough_id` INT NOT NULL,
`title` VARCHAR(64),
PRIMARY KEY (`id`),
KEY `idxTough` (`tough_id`)
);
CREATE TABLE `Tough` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(64) NOT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO `Tough` (`name`) VALUES ('ToughA'), ('ToughB'), ('ToughC'), ('ToughD');
INSERT INTO `Anonymous` (`title`, `tough_id`) VALUES
('Anon with tough A', 1),
('Anon with tough B', 2),
('Anon with tough C', 3),
('Anon with tough D', 4)
;