MYSQL IN()的问题!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MYSQL IN()的问题!相关的知识,希望对你有一定的参考价值。
印出所有ID用逗号分开
while ($row_lower = $db->fetch_array($call_gov_lower))
$lowerid .= $row_lower['fid'].',';
$pquery = $db->query("SELECT * FROM 表 where ID IN($lowerid)");
这样为什么会错误?
$lowerid .= $row_lower['fid'].',';
$lowerid .= "0";
$pquery = $db->query("SELECT * FROM 表 where ID IN($lowerid)");
注意你循环到最后,$lowerid 会多一个逗号的。$lowerid .= "0";就补个0吧。 或者把最后那个逗号去掉。 参考技术A 改一下,
while ($row_lower = $db->fetch_array($call_gov_lower))
$lowerid[]= $row_lower['fid'];
$pquery = $db->query(sprintf("SELECT * FROM 表 where ID IN('%s')",implode(",",$lowerid)));
另外提示:表名不要用中文
mysql中or和in的效率问题
分三中情况进行测试,分别是:
第一种情况:in和or所在列为主键的情形。
第二种情况:in和or所在列创建有索引的情形。
第二种情况:in和or所在列没有索引的情形。
每种情况又采用不同的in和or的数量进行测试。由于测试语句的数据量有4种情况,我这里就称为A组、B组、C组、D组,其中A组为3个值,B组为150个值,C组为300个值,D组为1000个
?
测试结果如下:
第一种情况,ID列为主键的情况,4组测试执行计划一样,执行的时间也基本没有区别。
A组or和in的执行时间: or的执行时间为:0.002s in的执行时间为:0.002s
B组or和in的执行时间: or的执行时间为:0.004s in的执行时间为:0.004s
C组or和in的执行时间: or的执行时间为:0.006s in的执行时间为:0.005s
D组or和in的执行时间: or的执行时间为:0.018s in的执行时间为:0.014s
第二种情况,ID列为一般索引的情况,4组测试执行计划一样,执行的时间也基本没有区别。
A组or和in的执行时间: or的执行时间为:0.002s in的执行时间为:0.002s
B组or和in的执行时间: or的执行时间为:0.006s in的执行时间为:0.005s
C组or和in的执行时间: or的执行时间为:0.008s in的执行时间为:0.008s
D组or和in的执行时间: or的执行时间为:0.021s in的执行时间为:0.020s
第三种情况,ID列没有索引的情况,4组测试执行计划一样,执行的时间也基本没有区别。
A组or和in的执行时间: or的执行时间为:5.016s in的执行时间为:5.071s
B组or和in的执行时间: or的执行时间为:1min 02s in的执行时间为:5.018s
C组or和in的执行时间: or的执行时间为:1min 55s in的执行时间为:5.018s
D组or和in的执行时间: or的执行时间为:6min 17s in的执行时间为:5.057s
结论:
1.in或or在字段有添加索引的情况下,查询很快,两者查询速度没有什么区别;
2.in或or在字段没有添加索引的情况下,所连接的字段越多(1or2or3or4or......),or比in的查询效率低很多
文章连接:http://m.blog.chinaunix.net/uid-20639775-id-3416737.html
以上是关于MYSQL IN()的问题!的主要内容,如果未能解决你的问题,请参考以下文章