为什么这个php脚本运行得如此之慢(简单选择)

时间:2016-08-02 18:38:26

标签: php mysql database select

当我使用脚本网址在谷歌浏览器中尝试此脚本时,此脚本运行速度非常慢,我想知道原因:

<?php

    include 'config.php';

    $conn = mysqli_connect($servername, $username, $password, $dbname);

    $playerEmail = $_REQUEST["playerEmail"];

    $sql = "SELECT *
        FROM players
        WHERE EMAIL = '$playerEmail'";

    $res = mysqli_query($conn,$sql);

    $result = array();

    while($row = mysqli_fetch_array($res)){
        array_push($result,
        array('EMAIL'=>$row[0],
              'DATEOFSIGNUP'=>$row[2],
              'USERNAME'=>$row[3],
              'GENDER'=>$row[4],
              'JOB'=>$row[5],
              'LVL'=>$row[6],
              'HP_NOW'=>$row[7],
              'HP_MAX'=>$row[8],
              'MANA_NOW'=>$row[9],
              'MANA_MAX'=>$row[10],
              'STR'=>$row[11],
              'SPD'=>$row[12],
              'INTEL'=>$row[13],
              'XP_NOW'=>$row[14],
              'XP_NEEDED'=>$row[15],
              'GOLDS'=>$row[16],
              'NUMBERSOFITEMS'=>$row[17],
              'LOCATION_X'=>$row[18],
              'LOCATION_Y'=>$row[19]
              ));
    }

    echo json_encode(array("result"=>$result));

    mysqli_close($conn);

?>

我所有的其他脚本都是使用$ _REQUEST制作的,所以我不相信它的原因。你可以想到的任何事情,随时在这里分享。

非常感谢大家!

2 个答案:

答案 0 :(得分:3)

您需要使用$sql = "SELECT * FROM players WHERE EMAIL = '$playerEmail'"; 列的索引来提高速度。

CREATE INDEX idx_nn_1 ON players(EMAIL);

创建索引:

{{1}}

由于您的代码对任何使用SQL注入的人开放,请阅读SQL注入和PHP PDO。您的代码甚至是SQL注入最容易入侵的代码之一(因此真正使代码更好或者您遇到麻烦)。

答案 1 :(得分:2)

在您的EMAIL列上创建索引的答案是正确的,但为了将来参考,这是一种使用PDO编写代码的更快捷,更安全的方法:

{{1}}