mysql奇葩的in语句

Filed in php心得, 服务器

如果in的key有索引,然后先select完了,将结果用key in (result1,result2, …)拼接就会走索引

可以如果直接 key in (select …)就不会走索引

奇葩吧,大家引以为戒,一定要用第一种方法,不然会卡到爆的

demo:

$sql = "select result from table1 where key='key1'";
$rows = $db->get_rows($sql);
$result = array();
foreach ($rows as $row)
{
$result[] = $row[0];
}
$result = implode(",", $result);
if ($torrentid)
{
$sql = "select * from table2 where result in($result) ";
}

走索引

select * from table2 where result in (select result from table1 where key='key1')

不走索引

理论上来说,两句话应该是完全一样的,但是因为mysql莫名其妙的优化方案,导致第二句居然不走索引……所以让php多处理几句话吧

发表评论

电子邮件地址不会被公开。 必填项已用*标注


*

最近评论
Click to view/hide
 
Click to view/hide
2014年一月
« 12月   3月 »
 12345
6789101112
13141516171819
20212223242526
2728293031  
站点功能
Click to view/hide