首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何优化mysql查询?

如何优化mysql查询?
EN

Stack Overflow用户
提问于 2013-02-28 15:00:33
回答 3查看 211关注 0票数 1

我使用这个查询从数据库中获取数据

如何优化和使用此连接的最佳代码?

代码语言:javascript
复制
connect();
$games_sql = mysql_query("SELECT gameid,mizbanid,mihmanid,score1,score2,gamedavar,gamestadium,now FROM games WHERE gameweek='$site_week' ORDER BY now ASC LIMIT 9");
for( $i = 0; $i < mysql_num_rows( $games_sql ); $i++ ) {
    $gameid = @mysql_result( $games_sql, $i, 0);
    $mizbanid = @mysql_result( $games_sql, $i, 1 );
    $mihmanid = @mysql_result( $games_sql, $i, 2);
    $score1 = @mysql_result( $games_sql, $i, 3);
    $score2 = @mysql_result( $games_sql, $i, 4);
    $gamedavar = @mysql_result( $games_sql, $i, 5);
    $gamestadium = @mysql_result( $games_sql, $i, 6);
    $now = @mysql_result( $games_sql, $i, 7);
    $gametimeanddate = jdate("l d M y ساعت G:i", $now);
    $gamedate = jdate("l d M y", $now);
    $gametime = jdate("G:i", $now);


`connect()` function include `mysql_connect` & `mysql_select_db`

我如何优化这段代码,以降低数据库的user_connection和提高速度?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-28 15:13:57

为什么不查询一次数据库来捕获所有信息呢?看看这个:

代码语言:javascript
复制
connect();
$sql = 'SELECT 
    gameid,
    mizbanid,
    mihmanid,
    score1,
    score2,
    gamedavar,
    gamestadium,
    now
FROM games
WHERE gameweek = ' . $site_week . '
ORDER BY now ASC
    LIMIT 9';
$query = mysql_query($sql);

if(mysql_num_rows($query)) {
    while($Result = mysql_fetch_object($query)) { //loop trough results

        print_r($Result); //prints the results.
        echo $Result->gameid; //this is how you echo the data
}
}

请注意,mysql_query函数已弃用,需要替换为mysqli :)。

票数 0
EN

Stack Overflow用户

发布于 2013-02-28 15:11:51

您可以始终使用缓存和memcache作为优化解决方案。您可以缓存您的查询,对于rest请求,您可以从缓存中弹出

票数 0
EN

Stack Overflow用户

发布于 2013-02-28 15:22:07

嗯,总会有很长的路要走..您可以通过多种方式进行优化,无论是使用php代码还是使用查询,但是您不应该使用即将消失的东西

代码语言:javascript
复制
Warning

此扩展从PHP 5.5.0起已弃用,并将在将来删除。相反,应该使用MySQLi或PDO_MySQL扩展。有关更多信息,请参阅MySQL:选择应用程序接口指南和相关常见问题解答。此函数的替代方法包括:

代码语言:javascript
复制
mysqli_stmt_num_rows()
PDOStatement::rowCount()

如果只想计算行数,最好使用:-

SELECT COUNT(*) FROM SomeTable

并且不应该使用带有benefit over double Quotes的单引号

正如NullPointer所提到的,您不应该使用use @ to suppress error message。目前,"@“错误控制操作符前缀甚至会禁用将终止脚本执行的关键错误的错误报告。在其他方面,这意味着如果你使用"@“来抑制来自某个函数的错误,而它要么不可用,要么输入错误,脚本就会死在那里,没有任何迹象表明原因。

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

https://stackoverflow.com/questions/15129436

复制
相关文章

相似问题

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