mysql join:啥更快? [关闭]

Posted

技术标签:

【中文标题】mysql join:啥更快? [关闭]【英文标题】:mysql join: what is faster? [closed]mysql join:什么更快? [关闭] 【发布时间】:2012-10-28 15:37:55 【问题描述】:

我的表: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 是唯一的)

【问题讨论】:

那么您到底想要达到什么目的呢?它应该怎么做,结果会是什么? 试试$sql='...'; $msc=microtime(true); $mysql_query($sql); $msc=microtime(true)-$msc; echo $msc.' seconds'; echo ($msc*1000).' milliseconds'; first 会更快,因为它只从一个表中获取数据 检查***.com/questions/2349270/… 第二个查询使用了一个不存在的表small_table_ratio? 【参考方案1】:

查询执行时间,并不是唯一需要考虑的参数。 如果任何其他表必须加入 big_table,则会降低这些连接的性能。

为了可扩展性,我会大胆地拆分表,将数据分开将确保您不会在这里出现瓶颈。

确保将最少使用的数据单独放在一个表中,将最常用的数据放在另一个表中。如果你有一个巨大的text,把它放在最少使用的表中,也会很好。

【讨论】:

【参考方案2】:

没有加入比加入更快。如果你有一个合适的索引(即widthheight 组合的单个索引),那么big_table 上的简单选择会更快。

【讨论】:

看他可能会加入sub_category_idcategory_id,他只是将瓶颈转移到其他地方,整体性能会下降,还是我错了?

以上是关于mysql join:啥更快? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

OUTER APPLY 和 OUTER JOIN 有啥区别,何时使用它们? [关闭]

sql cross join - 有人发现它有啥用处? [关闭]

MySQL 中哪一个更快? COUNT(id) 还是计算结果行? [关闭]

有没有比我的笔记本电脑更快地执行我的 mysql 的地方? [关闭]

mysql如何更快地插入数百万条记录? [关闭]

MySQL 查询 - 这有啥问题吗? [关闭]