2016-11-09 3 views
0

MysqlユーザーとSQLユーザー。この質問はあなたの両方に関係しています。そのインデックスについて。私はこのウェブサイトのためのテーブル構造を持っています。私はタイトル、説明、投稿などのユーザーを格納する共通のテーブルを1つ持っています。また、このテーブル構造で特定の広告カテゴリに関する詳細属性を格納しています。挿入クエリまたは更新クエリは、クエリに含まれていないインデックス付き列から影響を受けますか?

CREATE TABLE `ad_detail` (
    `ad_detail_id_pk` int(10) NOT NULL AUTO_INCREMENT, 
    `header_id_fk` int(10) NOT NULL, 
    `brand_id_fk` smallint(5) NULL, 
    `brand_name` varchar(200) NULL, 
    `is_brand_new` bool, 
    ....... 
    `transmission_type_id_fk` tinyint(3) NULL, 
    `transmission_type_name` varchar(200) NULL, 
    `body_type_id_fk` tinyint(3) unsigned NULL, 
    `body_type_name` varchar(200) NULL, 
    `mileage` double NULL, 
    `fuel_type_id_fk` tinyint(3) NULL, 
    ...... 
    PRIMARY KEY (`ad_detail_id_pk`) 
) 

はSOあなたは属性の最初の部分は、モバイル広告および第二部に属します見ることができるように、私は他のカテゴリーの他の属性を持っているので、上のように車両広告を属します。 header_id_fkは、共通の情報を持つヘッダテーブルとの関係を保持します。したがって、これらの外部キーはすべてフィルタリング広告に含まれるものです。 Nokiaによって作られたすべての携帯電話を見つけることを望む人もいます。それでは、brand_id_fkが使用されます。燃料の種類によって車両をフィルタリングしたい人もいます。ですから、私はこの表のすべてのフィルタリング属性にインデックスを付ける必要があります。だから今これは私の質問です。

したがって、ユーザー投稿のモバイル広告挿入ステートメントには、データを保存するための特定のフィールドが含まれません。しかし、われわれが知っているように、インデックスはデータ検索時にパフォーマンスを得ますが、クエリを挿入して更新するために追加コストがかかります。だから私はモバイル広告を挿入する場合、その挿入クエリは、車両広告のインデックスフィールドに関連する他の属性に苦しんでいますか?

+0

ブランドIDとブランド名の両方(および他のペア)がなぜこのテーブルにありますか? 'name'は他のテーブルの_only_でなければなりません。 –

+0

私が追加したEAVタグを見てください。 –

答えて

0

はい、通常のインデックスには、テーブル内のすべての行に1つの行が含まれます(http://use-the-index-luke.com/sql/where-clause/nullを使用しない限り)。したがって、すべてのインデックスには、テーブルに行を挿入するたびに新しい行が挿入され、関連付けられたインデックスメンテナンスの問題(ページ分割など)

filtered /部分インデックスは、 の特定の問題は、NULLを挿入しているフィールドのインデックスによって遅くなりますが、ソリューションが完全にテストされていることを確認して、それらが使用されると思われるクエリでインデックスが使用されていることを確認する必要があります。 は部分インデックスAFAIKをサポートしていないことに注意してください。以下はです。

Create Index ix_myFilteredIndex On ad_detail (brand_id_fk) Where brand_id_fk Is Not Null; 
関連する問題