我可以在MYSQL中选择一列而不是全部,以使其更快吗?

时间:2012-05-01 20:53:29

标签: php mysql

我想做这样的事情:

$query=mysql_query("SELECT userid FROM users WHERE username='$username'");
$the_user_id= .....

因为我想要的只是与用户名对应的用户ID。

通常的方式是:

$query=mysql_query("SELECT * FROM users WHERE username='$username'");
while ($row = mysql_fetch_assoc($query))
    $the_user_id= $row['userid'];

但这有什么更有效的吗? 非常感谢,问候

6 个答案:

答案 0 :(得分:13)

你的头上钉了一针:你想要做的是SELECT userid FROM users WHERE username='$username'。试试吧 - 它会起作用:)

SELECT *几乎总是一个坏主意;最好指定希望MySQL返回的列的名称。当然,您仍然需要使用mysql_fetch_assoc或类似的东西来实际将数据转换为PHP变量,但至少这样可以节省MySQL发送您不会使用的所有这些列的开销。< / p>

另外,您可能希望使用较新的mysqli库或PDO。这些也比旧的mysql库更有效,旧的mysql库已被弃用。

答案 1 :(得分:4)

不仅可以,而且你应该。不幸的是,太多的年轻开发人员养成了选择太多数据的习惯。运行查询后,您不需要执行while循环,因为您只有一条记录返回。相反,只需使用以下内容:

$sql = sprintf( "SELECT userid FROM users WHERE username = '%s'", $username );
$result = mysql_query( $sql ) or die( mysql_error() );
$data = mysql_result( $result, 0 );

if ( $data ) echo $data; // first userid returned

mysql_result()的第二个参数是您要检索的行索引。 0是第一个。

答案 2 :(得分:3)

“通常”的方式是选择您需要的列。

任何属于select且不需要的列都会降低检索速度。部分原因是网络流量,部分原因是如果只选择了某些列,数据库引擎可以应用某些优化。

select *通常在生产代码中不受欢迎。

答案 3 :(得分:3)

您的查询是正确的:

$query = mysql_query("SELECT userid FROM users WHERE username='$username'");

如果正确完成,这将。请注意,必须使用$username正确转义mysql_real_escape_string。我建议查看参数化查询,以降低引入SQL注入不可侵犯性的风险。

您可以更改的另一件事是使用mysql_result代替您的循环:

$the_user_id = mysql_result($result, 0);

这假定知道你只会得到一行。

答案 4 :(得分:1)

是的,这是一个很棒的优化练习!

此外,如果您想更进一步并进行超级优化,请尝试添加LIMIT,如下所示:$query=mysql_query("SELECT userid FROM users WHERE username='$username' LIMIT 1");

当然,这假设您只希望返回一个用户ID,并且一旦找到它就会使数据库引擎停止。

但是,最重要的是:总是逃避/消毒您的输入数据! (不能强调这一点)

答案 5 :(得分:0)

您可以使用一行代码执行此操作

<head>
    <script src="javascripts/jquery.js"></script>
    <script src="javascripts/jquery-ui.min.js"></script>
    <link rel="stylesheet" href="stylesheets/jquery-ui.css">

    ////////////// those are the scripts that i use in the function //////
    <link rel="stylesheet" href="highlight.js/zenburn.css">
    <link rel="stylesheet" href="stylesheets/css/theme-dark/annotorious-dark.css" />
    <script src="highlight.js/highlight.pack.js"></script>
    <script src="javascripts/annotorious.min.js"></script>
    /////////////
    <script>
    $("#annotation").click(function() {
        hljs.initHighlightingOnLoad();
        //function of annotation
    });
    </script>
</head>
<body>
<button type="submit" id="annotation" >
    <img src="stylo.png"  style="width: 30px ; height:50px" alt="Submit">
</button>
</body>

在使用此

之前,您必须如下所示连接到数据库
echo array_values(mysqli_fetch_array($mysqli->query("SELECT name FROM user WHERE id='$userid'")))[0];

mouseY

的信用