0

我的桌子:big_table

+-----------------+--------------+------+-----+--- ------+----------------+
| 领域 | 类型 | 空 | 钥匙 | 默认 | 额外 |
+-----------------+--------------+------+-----+--- ------+----------------+
| 编号 | 中型(7) | 否 | 优先级 | 空 | 自动增量 |
| 标题 | varchar(255) | 否 | | 空 | |
| 类别 ID | 小整数(2) | 否 | | 空 | |
| sub_category_id | 小整数(2) | 否 | | 空 | |
| 宽度 | 小整数(5) | 否 | | 空 | |
| 身高 | 小整数(5) | 否 | | 空 | |
| ratio_width | 小整数(5) | 否 | | 空 | |
| ratio_height | 小整数(5) | 否 | | 空 | |
| 尺寸 | 整数(8) | 否 | | 空 | |
| 哑剧 | 小整数(2) | 否 | | 空 | |
| 意见 | 中型(7) | 否 | 穆尔 | 空 | |
| 时间 | 整数(10) | 否 | | 空 | |
| 文件 | varchar(255) | 否 | | 空 | |
+-----------------+--------------+------+-----+--- ------+----------------+

小桌子

+--------+-------------+------+-----+---------+-- -----+
| 领域 | 类型 | 空 | 钥匙 | 默认 | 额外 |
+--------+-------------+------+-----+---------+-- -----+
| 编号 | 中型(7) | 否 | 优先级 | 空 | |
| 宽度 | 小整数(5) | 否 | 穆尔 | 空 | |
| 身高 | 小整数(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 回答