首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确测试查询性能

问如何正确测试查询性能
EN

Stack Overflow用户
提问于 2009-09-24 09:22:28
回答 4查看 320关注 0票数 1

我有一个函数,它接受ID数组或单个ID作为参数。如果传递了一个数组,它会在逗号上内爆,以使ID查询更友好。

此函数内部有一个查询,用于更新传递的ID的记录。

查询如下:

代码语言:javascript
复制
"UPDATE tbl_name SET enabled = 1 WHERE ID IN (" . $IDs . ")";

现在,我想知道对数组使用上面的查询是否存在性能问题,比如:

代码语言:javascript
复制
"UPDATE tbl_name SET enabled = 1 WHERE ID = " . $IDs;

如果只传递了一个ID。

我在MySQL查询浏览器中测试了相同ID的两个查询,两个查询的性能都是.02秒-性能差别很小。

在查询浏览器中简单地测试这两个是检查最佳查询性能的好方法吗?

只是如果不需要的话,我不想在一个函数中使用两个查询来污染我的代码。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-09-24 09:38:58

我会丢掉第二个查询,只留下第一个,以使代码更具可读性和可维护性。

代码语言:javascript
复制
if (is_array($id)) $id = implode(',', $id);
$query = 'UPDATE table SET marked = 1 WHERE id IN ('.$id.')';

这样,您将获得以下示例查询中的任意一个:

代码语言:javascript
复制
UPDATE table SET marked = 1 WHERE id IN (15);
UPDATE table SET marked = 1 WHERE id IN (21,12,15,16);

下面是MySQL手册中关于运算符IN的用法:

如果所有值都是常量,则根据expr的类型进行计算并排序。然后,使用二进制搜索来完成对项目的搜索。这意味着如果IN值列表完全由常量组成,则IN非常快。

我还建议“不要修复没有损坏的代码”,最好注意编写干净、可读和可维护的代码,因为您的时间比服务器的时间更宝贵,特别是当它是毫秒或更短的时候。首先看看应用程序的性能,如果没问题,那么就完成了--继续做你可以利用时间做的其他事情。如果它很慢--测量它(简单的时间测量就可以了),找出什么是慢的,然后只对其进行优化。通常,速度慢的是从许多表中进行一些大而混乱的select操作,这些表有很多连接,但不是像这样简单的更新。还要记住,更新(通常)很少,用户可以等待它们,所以要专注于优化选择。

票数 1
EN

Stack Overflow用户

发布于 2009-09-24 12:36:14

如果您希望节省cpu周期,并希望获得性能,请使用IN。这样想吧..你得带着10件东西去邻居家...哪一个会更快?同时获取全部10个或逐个执行。即使是一毫秒,当乘以实例数时,它也会变得非常重要。

想象一下,当你向mysql发送一个查询时,后台会发生什么,mysql引擎需要编译每个查询,然后处理它,不要忘记PHP必须通过网络进行通信,才能将您的查询发送到mysql。

因此,如果您发送10个查询而不是1个查询..U乘以处理时间。这就是“视图”比标准select语句更快的原因。

票数 1
EN

Stack Overflow用户

发布于 2009-09-24 09:25:08

您可以尝试在具有随机ID的大循环中运行这两个查询

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1470604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档