0

私のテーブル: big_table

+-----+--------------+------+-----+--- ------+----------------+
| | フィールド | フィールド タイプ | ヌル | キー | キー | デフォルト | エクストラ |
+-----+--------------+------+-----+--- ------+----------------+
| | ID | mediumint(7) | いいえ | PRI | ヌル | auto_increment |
| | タイトル | varchar(255) | いいえ | | | ヌル | | |
| | カテゴリ ID | tinyint(2) | いいえ | | | ヌル | | |
| | sub_category_id | tinyint(2) | いいえ | | | ヌル | | |
| | 幅 | smallint(5) | いいえ | | | ヌル | | |
| | 高さ | smallint(5) | いいえ | | | ヌル | | |
| | 比率_幅 | smallint(5) | いいえ | | | ヌル | | |
| | 比率_高さ | smallint(5) | いいえ | | | ヌル | | |
| | サイズ | int(8) | いいえ | | | ヌル | | |
| | マイム | tinyint(2) | いいえ | | | ヌル | | |
| | ビュー | mediumint(7) | いいえ | マル | ヌル | | |
| | 時間 | int(10) | いいえ | | | ヌル | | |
| | ファイル | varchar(255) | いいえ | | | ヌル | | |
+-----+--------------+------+-----+--- ------+----------------+

小さいテーブル

+--------+--------------+------+-----+---------+-- ------+
| | フィールド | フィールド タイプ | ヌル | キー | キー | デフォルト | エクストラ |
+--------+--------------+------+-----+---------+-- ------+
| | ID | mediumint(7) | いいえ | PRI | ヌル | | |
| | 幅 | smallint(5) | いいえ | マル | ヌル | | |
| | 高さ | smallint(5) | いいえ | マル | ヌル | | |
+--------+--------------+------+-----+---------+-- ------+

何が速いか(例):

   SELECT * FROM `big_table` WHERE `width` =1920 AND `height`=1080;  

または結合を使用

 select big_table.*
 from small_table
 left join small_table small_table2
 ON (small_table.id=small_table2.id
     and `small_table`.`height` = '1080')
 left join big_table
 ON (big_table.id=small_table.id)
 where small_table.width = '1920'; 

または同じテーブルから結合しますか?

select big_table.*
from big_table as big_table1
left join big_table big_table2
ON (big_table1.id=big_table2.id and  `big_table1`.`height` = '1080')
left join big_table 
ON (big_table.id=big_table1.id)
where big_table1.width = '1920';

または、より良い解決策、より良い選択がありますか?(両方のテーブルでインデックス (幅と高さ) を使用できますが、ID のみが一意です)

4

2 に答える 2

1

結合しないほうが速いです。適切なインデックス (つまり、 と を組み合わせた単一のインデックスwidth)があるheight場合、単純な選択はbig_tableより高速になります。

于 2012-11-08T12:28:35.403 に答える
0

考慮すべきパラメータは、クエリの実行時間だけではありません。
他のテーブルを結合する必要がある場合big_table、それらの結合のパフォーマンスが低下します。

スケーラビリティのために、私は挑戦的にテーブルを分割します。データを分割することで、ここでボトルネックが発生しないことが保証されます。

使用頻度の低いデータをテーブルに配置し、最も使用頻度の高いデータを別のテーブルに配置してください。巨大な がある場合は、textこれを最も使用されていないテーブルに入れると、同様に良いでしょう.

于 2012-11-08T12:31:29.347 に答える