質問編集履歴
2
コードブロックを追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,24 +1,24 @@
|
|
1
1
|
### 前提
|
2
2
|
WordPressで`CREATE TABLE`しています。
|
3
3
|
|
4
|
-
外部キーの設定にあたって、CONSTRAINTを介すとインデックスが自動で貼られ、介さないと貼られないという現象を見つけました。
|
4
|
+
外部キーの設定にあたって、`CONSTRAINT`を介すとインデックスが自動で貼られ、介さないと貼られないという現象を見つけました。
|
5
5
|
|
6
6
|
これにつきまして以下の点を知りたいと思っています。
|
7
7
|
|
8
8
|
###知りたいこと
|
9
9
|
【1】
|
10
|
-
なぜCONSTRAINTを介さないとインデックスが貼られないのでしょうか?
|
10
|
+
なぜ`CONSTRAINT`を介さないとインデックスが貼られないのでしょうか?
|
11
11
|
|
12
|
-
[MySQLでは外部キーを設定すると自動でインデックスが貼られる機能があるはず](http://kwski.net/mysql/602/)ですが、以下のCREATE文の
|
12
|
+
[MySQLでは外部キーを設定すると自動でインデックスが貼られる機能があるはず](http://kwski.net/mysql/602/)ですが、以下の`CREATE`文の
|
13
13
|
`FOREIGN KEY (first_ID) REFERENCES wp_firsts(ID),`
|
14
14
|
という行での外部キー設定ではいかにしてその機能を逃れ、インデックスが貼られずに済んでいるのでしょうか?
|
15
15
|
|
16
|
-
MariaDBだから自動で貼られないのでしょうか?しかしCONSTRAINTを介した
|
16
|
+
MariaDBだから自動で貼られないのでしょうか?しかし`CONSTRAINT`を介した
|
17
17
|
`CONSTRAINT fk_wp_seconds_01 FOREIGN KEY (first_ID) REFERENCES wp_firsts(ID)`
|
18
18
|
という行では自動で貼られていますし、謎です。
|
19
19
|
|
20
20
|
【2】
|
21
|
-
使い道のないインデックスは貼りたくないのですが、外部キーには名前をつけたいです。しかしCONSTRAINTを介さないと名前をつけることはできないと思うのですが、介せばインデックスが自動で貼られてしまいます。このジレンマを解消し、外部キーに名前をつけつつ、インデックスを貼らない方法はあるでしょうか?
|
21
|
+
使い道のないインデックスは貼りたくないのですが、外部キーには名前をつけたいです。しかし`CONSTRAINT`を介さないと名前をつけることはできないと思うのですが、介せばインデックスが自動で貼られてしまいます。このジレンマを解消し、外部キーに名前をつけつつ、インデックスを貼らない方法はあるでしょうか?
|
22
22
|
|
23
23
|
【3】
|
24
24
|
WordPerssユーザーのみなさんは、どのように外部キーをセットしていますか?
|
@@ -28,13 +28,13 @@
|
|
28
28
|
|
29
29
|
|
30
30
|
###発生している問題
|
31
|
-
該当のソースコードを実行しますと、wp_secondsテーブルに作成されるインデックスは下図の3つとなります。
|
31
|
+
該当のソースコードを実行しますと、`wp_seconds`テーブルに作成されるインデックスは下図の3つとなります。
|
32
32
|
|
33
|
-
CONSTRAINTを介して作成された外部キー(fk_wp_seconds_01)はインデックスが貼られ、介さない方の外部キーでは貼られないのです。
|
33
|
+
`CONSTRAINT`を介して作成された外部キー(`fk_wp_seconds_01`)はインデックスが貼られ、介さない方の外部キーでは貼られないのです。
|
34
34
|

|
35
35
|
|
36
36
|
### 該当のソースコード
|
37
|
-
wp_firstsテーブルと、そのIDカラムを外部キーに持つwp_secondsテーブルのCREATE文になります。
|
37
|
+
`wp_firsts`テーブルと、その`ID`カラムを外部キーに持つ`wp_seconds`テーブルの`CREATE`文になります。
|
38
38
|
```PHP
|
39
39
|
create_wp_firsts();
|
40
40
|
create_wp_seconds();
|
@@ -81,7 +81,7 @@
|
|
81
81
|
```
|
82
82
|
|
83
83
|
### 試したこと
|
84
|
-
wp_secondsテーブルに対しSHOW CREATE TABLEを実行すると以下の出力を得ましたが、さらに訳の分からないことになりました。
|
84
|
+
`wp_seconds`テーブルに対し`SHOW CREATE TABLE`を実行すると以下の出力を得ましたが、さらに訳の分からないことになりました。
|
85
85
|
|
86
86
|
|
87
87
|
```SQL
|
@@ -96,9 +96,9 @@
|
|
96
96
|
CONSTRAINT `wp_seconds_ibfk_1` FOREIGN KEY (`first_ID`) REFERENCES `wp_firsts` (`ID`)
|
97
97
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8
|
98
98
|
```
|
99
|
-
この結果によれば、外部キーの設定はいずれもCONSTRAINTを介してされているのです。
|
99
|
+
この結果によれば、外部キーの設定はいずれも`CONSTRAINT`を介してされているのです。
|
100
100
|
|
101
|
-
ならばなぜ、fk_wp_seconds_01だけインデックスが貼られ、wp_seconds_ibfk_1は貼られないのか…訳がわからなくなてきました。
|
101
|
+
ならばなぜ、`fk_wp_seconds_01`だけインデックスが貼られ、`wp_seconds_ibfk_1`は貼られないのか…訳がわからなくなてきました。
|
102
102
|
### 補足情報(FW/ツールのバージョンなど)
|
103
103
|
|
104
104
|
サーバーはGMOサーバーです。
|
1
知りたいことを修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
### 前提
|
2
|
-
WordPressでCREATE TABLEしています。
|
2
|
+
WordPressで`CREATE TABLE`しています。
|
3
3
|
|
4
4
|
外部キーの設定にあたって、CONSTRAINTを介すとインデックスが自動で貼られ、介さないと貼られないという現象を見つけました。
|
5
5
|
|
@@ -7,8 +7,16 @@
|
|
7
7
|
|
8
8
|
###知りたいこと
|
9
9
|
【1】
|
10
|
-
なぜCONSTRAINTを介さないとインデックスが貼られないのでしょうか?
|
10
|
+
なぜCONSTRAINTを介さないとインデックスが貼られないのでしょうか?
|
11
11
|
|
12
|
+
[MySQLでは外部キーを設定すると自動でインデックスが貼られる機能があるはず](http://kwski.net/mysql/602/)ですが、以下のCREATE文の
|
13
|
+
`FOREIGN KEY (first_ID) REFERENCES wp_firsts(ID),`
|
14
|
+
という行での外部キー設定ではいかにしてその機能を逃れ、インデックスが貼られずに済んでいるのでしょうか?
|
15
|
+
|
16
|
+
MariaDBだから自動で貼られないのでしょうか?しかしCONSTRAINTを介した
|
17
|
+
`CONSTRAINT fk_wp_seconds_01 FOREIGN KEY (first_ID) REFERENCES wp_firsts(ID)`
|
18
|
+
という行では自動で貼られていますし、謎です。
|
19
|
+
|
12
20
|
【2】
|
13
21
|
使い道のないインデックスは貼りたくないのですが、外部キーには名前をつけたいです。しかしCONSTRAINTを介さないと名前をつけることはできないと思うのですが、介せばインデックスが自動で貼られてしまいます。このジレンマを解消し、外部キーに名前をつけつつ、インデックスを貼らない方法はあるでしょうか?
|
14
22
|
|