连接数据库的功能的性能

时间:2015-07-24 10:52:19

标签: php sql performance

我有一个功能来检查管理员是否禁用了某个功能/模块。

该函数如下所示(在functions.php中):

function function_enabled($function_module) {
    include("dbconnect.php");
    if ($function_module == "changelogs" OR $function_module == "news" OR $function_module == "calendar" OR $function_module == "groups" OR $function_module == "settings" OR $function_module == "eat" OR $function_module == "weather" OR $function_module == "usertext" OR $function_module == "login") {
        $sql = $db->query("SELECT enabled FROM functions WHERE function_name = '$function_module'");
        $row = $sql->fetch_object();
        $return = $row->enabled;
        return $return;
    }
}

这就是我使用该函数的方法(在任何其他php文件中):

include("functions.php");
if(function_enabled("weather") == 1) {
    //do the weather stuff here
} else {
    echo"Function disabled";
}

现在我的问题:这个功能的性能如何?这会导致相对较高的性能命中吗?有没有更好/更快的方法来检查是否启用了一个功能,或者这个脚本是否正常?

更新1

现在,我将这些多个查询合并为一个,以便所有值都在一个数组中。

function compare_id($a, $b) {
    if ($a['id'] == $b['id']) return 0;
    return ($a['id'] < $b['id']) ? -1 : 1;
}   

$sql = $db->query("SELECT function_name, enabled, id FROM functions");

$function_array = array();
while ($row = mysqli_fetch_assoc($sql)) {
    $function_array[] = $row;
}
usort($function_array, compare_id);

if($function_array[0]['enabled'] == 1) {
    echo"changelogs enabled<br>";
} else {
    echo"changelogs disabled<br>";
}

if($function_array[2]['enabled'] == 1) {
    echo"calendar enabled<br>";
} else {
    echo"calendar disabled<br>";
}

if($function_array[7]['enabled'] == 1) {
    echo"usertext enabled<br>";
} else {
    echo"usertext disabled<br>";
}

if($function_array[8]['enabled'] == 1) {
    echo"login enabled<br>";
} else {
    echo"login disabled<br>";
}

if($function_array[4]['enabled'] == 1) {
    echo"settings enabled<br>";
} else {
    echo"settings disabled<br>";
}

这种方法更快吗?

2 个答案:

答案 0 :(得分:1)

看起来不错。它给你问题吗?表或索引中的数据库查询可能存在性能问题。

一般来说,你不应该从一开始就建立性能。而是建立起功能的东西,然后回到阻塞点所在的选择。有高负载的Web服务使用简单的框架(Ruby on Rails,Laravel)。他们只需优化2-5%的负载代码。当你知道阻塞点在哪里以及它为什么会窒息时,你可以选择如何选择。它应该优化,还是应该用另一种语言重写。

你的功能表是否经常变化?如果没有,你可以将其导出到文件。然后PHP可以读取一次并将其作为数组存储在Memory中。引用数组的速度会快<major version>.<minor version>.<build number>.<revision>而没有数据库吞吐量问题。

答案 1 :(得分:1)

function function_enabled($function_module) {
    $_FUNCTION_MODULE = array ("changelogs", "news", "calendar", "groups", "settings", "eat", "weather", "usertext", "login");
    require_once ("dbconnect.php");
    if (in_array($function_module, $_FUNCTION_MODULE) {
        $query      = $db->query("SELECT enabled FROM functions WHERE function_name = '$function_module'");
        $row            = $query->fetch_object();
        $isEnabled  = $row->enabled;
        return $isEnabled;
    }
    return NULL;
}