2017-08-21 9 views
0

私はselectクエリのこの結合された列のインデックスを作成しました。別の列にもインデックスを付ける必要がありますか?

CREATE TABLE `tbl` (
    `id` int(10) unsigned NOT NULL, 
    `pid` int(10) unsigned NOT NULL, 
    `cid` int(10) unsigned NOT NULL, 
    `name` int(11) DEFAULT NULL, 
    `desc` varchar(500), 
    `deleted` tinyint(1) unsigned NOT NULL DEFAULT 0, 
    `createdAt` datetime DEFAULT NULL, 
    PRIMARY KEY `pid_cid` (`pid`,`cid`) 
    ) ENGINE=InnoDB 

WHERE句のようなテーブルを持っているのである:

where pid=pid [and deleted = 1]; 
where cid=cid [and deleted = 1]; 
where pid=pid and cid=cid [and deleted = 1]; 
  1. はI指数pid別途cidべきでしょうか?
  2. deletedにインデックスを付ける必要がありますか?
+0

https://stackoverflow.com/questions/2955459/what-is-an-index-in-sqlとhttps://stackoverflow.com/questions/1108/how-does-database-indexing-workをお読みください –

+0

これは、列DESCがintなるだけでトラブル – Strawberry

+0

主*そして、私の見解ではありませんidという列を持っていることは本当に奇妙ですか!?!? – Strawberry

答えて

1

インデックスの最適なセットは次のようになります。

  • pid, deleted
  • cid, deleted
  • pid, cid, deleted

あなたはすべての3つは、あなたのデータに依存必要かどうか。 pid/cidには、削除された値の数がいくつありますか。最初の2つで十分です。それ自体で

インデックスdeletedはおそらく有用ではありません。おそらく、それは一般に2つの値しか取らない。これは一般的にインデックスの候補にはならない。

関連する問題