首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在每次查询中写入数据库名称真的比在每次页面加载时调用mysql_select_db()更快吗?

在每次查询中写入数据库名称真的比在每次页面加载时调用mysql_select_db()更快吗?
EN

Stack Overflow用户
提问于 2010-09-17 09:32:41
回答 3查看 240关注 0票数 2

我在一个相当大的网站工作;我们每个月有大约4-5亿的页面浏览量。我们使用PHP和MySQL。

目前我们的页面流是这样工作的(为了清楚起见,半伪代码):

代码语言:javascript
复制
mysql_connect();
mysql_select_db('red');
mysql_query('SELECT * FROM apples');
mysql_query('SELECT * FROM cakes');

我的一位同事建议mysql_select_db减慢页面加载速度并增加DB服务器的负载,并建议将我们的“流”更改为:

代码语言:javascript
复制
mysql_connect();
mysql_query('SELECT * FROM red.apples');
mysql_query('SELECT * FROM red.cakes');

它真的会有所不同吗?我特别关心做出这种改变所需要的时间;我们会看到任何明显的结果吗?

值得吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-09-17 09:54:37

基准:

代码语言:javascript
复制
$ cat 1.php 
<?php
mysql_connect('localhost') or die(mysql_error());
mysql_select_db('test') or die(mysql_error());
mysql_query('SELECT SQL_NO_CACHE * FROM foo') or die(mysql_error());
mysql_query('SELECT SQL_NO_CACHE * FROM bar') or die(mysql_error());
?>
$ cat 2.php 
<?php
mysql_connect('localhost') or die(mysql_error());
mysql_query('SELECT SQL_NO_CACHE * FROM test.foo') or die(mysql_error());
mysql_query('SELECT SQL_NO_CACHE * FROM test.bar') or die(mysql_error());
?>
$ time ( for i in {1..100} ; do php 1.php; done;)

real    0m3.554s
user    0m2.300s
sys     0m1.188s
$ time ( for i in {1..100} ; do php 2.php; done;)

real    0m3.555s
user    0m2.292s
sys     0m1.208s

我说是胡说八道。

您的同事是否与mysql命令行客户端混淆了,如果您切换到数据库(可以使用-A开关避免),mysql命令行客户端将加载所有的表名和列名。

票数 9
EN

Stack Overflow用户

发布于 2010-09-17 09:55:15

我不能肯定你的问题,但我怀疑这会有很大的不同。

但是还有其他的东西可以让你。我建议您编写所有的列名,而不是使用*。我确信这会加快你的查询速度。

例如:

代码语言:javascript
复制
mysql_query('SELECT id, size, color FROM apples');

你可以做的另一件事是正确地使用LIMIT。例如,如果您正在从数据库中选择一个用户,并且您确信该用户是惟一的,那么在查询的末尾使用LIMIT 1

例如:

代码语言:javascript
复制
SELECT id, username, access_level FROM users WHERE id = ? LIMIT 1
票数 0
EN

Stack Overflow用户

发布于 2010-09-17 12:41:13

我非常怀疑,如果您添加数据库名称,是否会在性能方面有所不同。

我认为,持久连接和将查询重构为永不选择*将是一个很好的第一步。然后,您可能想要考虑使用查询缓存,并查看一下您缓慢的查询日志。比起一些小的语义差异,比如指定模式名称,这些方法将会给您带来更多的帮助。

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

https://stackoverflow.com/questions/3732116

复制
相关文章

相似问题

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