Jud*_*man 34 php mysql performance
这是一个非常简单的问题,我假设答案是"无所谓",但无论如何我都要问...
我有一个用PHP构建的通用sql语句:
$sql = 'SELECT * FROM `users` WHERE `id` IN(' . implode(', ', $object_ids) . ')';
Run Code Online (Sandbox Code Playgroud)
假设先前的有效性检查($object_ids是一个包含至少1个项目和所有数值的数组),我应该执行以下操作吗?
if(count($object_ids) == 1) {
$sql = 'SELECT * FROM `users` WHERE `id` = ' . array_shift($object_ids);
} else {
$sql = 'SELECT * FROM `users` WHERE `id` IN(' . implode(', ', $object_ids) . ')';
}
Run Code Online (Sandbox Code Playgroud)
或者是检查count($object_ids)不值得在实际的sql语句中保存的内容(如果有的话)?
J.D*_*.D. 48
大多数其他答案都没有提供任何结论,只是推测.因此,根据@ Namphibian的回答提供的好建议,我EXPLAIN在一些类似于OP的查询中运行了一些查询.
结果如下:
EXPLAIN用于查询= 1:


@ mes的答案似乎表明,对于更复杂的查询,情况可能并非总是如此.
所以,对于那些懒得跑EXPLAIN自己的人,现在你知道了.是的,您可能希望EXPLAIN在自己的查询上运行以确保以这种方式处理它.:-)
Kon*_*rak 23
MySQL语句之间没有区别,当IN只是一个元素时,MySQL优化器会将IN转换为=.不要打扰.
mel*_*okb 16
在大范围的事情中,它们都不重要.与数据库通信的网络延迟将远远超过count($object_ids)开销或=vs IN开销.我称之为过早优化的情况.
您应该对应用程序进行概要分析和加载测试,以了解真正的瓶颈所在.
使用explain语句运行这两个查询.这将向您展示MySQL正在做什么.你专注于MySQL优化应该是MySQL内部的查询.尝试优化执行哪个查询有点为时过早.
如果没有例如索引,这两个查询的性能都可能很差.MySQL的EXPLAIN语句在这里是黄金.因此,当您进入运行缓慢的查询时,EXPLAIN语句将显示原因.