【发布时间】: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 会更快,因为它只从一个表中获取数据
-
第二个查询使用了一个不存在的表
small_table_ratio?
标签: mysql performance join