2

我正在尝试创建一个尽可能精简的脚本。当前的实现需要 20 分钟来处理 3k 条记录。我写了一个快速而肮脏的脚本,它在大约 90 秒内处理了相同的信息。我现在必须提取配置信息和其他一些东西,所以我正在尝试优化我能做的一切。

这是我现在拥有的:

$key_query = mysql_query("SELECT * FROM configuration WHERE configuration_group_id = 6501 AND configuration_key = 'RCS_SKIP_DAYS';");
if (!$key_query) {
    echo "DB Error, could not query the database\n";
    echo 'MySQL Error: ' . mysql_error();
    exit;
}
$key = mysql_fetch_array($key_query);
$skip_days = $key['configuration_value'];
mysql_free_result($key_query);

$key_query = mysql_query("SELECT * FROM configuration WHERE configuration_group_id = 6501 AND configuration_key = 'RCS_BASE_DAYS';");
if (!$key_query) {
    echo "DB Error, could not query the database\n";
    echo 'MySQL Error: ' . mysql_error();
    exit;
}
$key = mysql_fetch_array($key_query);
$base_days = $key['configuration_value'];
mysql_free_result($key_query);

$key_query = mysql_query("SELECT * FROM configuration WHERE configuration_group_id = 6501 AND configuration_key = 'RCS_EMAIL_TTL';");
if (!$key_query) {
    echo "DB Error, could not query the database\n";
    echo 'MySQL Error: ' . mysql_error();
    exit;
}
$key = mysql_fetch_array($key_query);
$ttl_days = $key['configuration_value'];
mysql_free_result($key_query);

$skip_date =  date('Ymd',strtotime('-'.$skip_days.' day',time()));
$base_date =  date('Ymd',strtotime('-'.$base_days.' day',time()));
$ttl_date =  date('Ymd',strtotime('-'.$ttl_days.' day',time()));

我不确定是否可以将 3 个配置键放在一起并分配给变量,或者是否有更好的方法来优化它。

我感谢任何和所有的帮助!

4

3 回答 3

3

首先要停止使用这个 mysql_query 这个函数已被弃用,尝试使用 mysql pdo 或 mysql li

Mysql PDOMysqlli

下一步您可能想要更改“ select *”,这是一个很大的流程成本,请尝试指定您要选择的列。

于 2013-09-17T17:42:50.350 回答
2

你研究过IN语法吗?它很甜。SELECT * FROM如果您只需要几个字段,也绝对不需要

<?php

$sql = "SELECT configuration_key , configuration_value FROM configuration WHERE configuration_group_id = 6501 AND configuration_key IN ('RCS_SKIP_DAYS','RCS_BASE_DAYS','RCS_EMAIL_TTL')";

$query = mysqli_query($sql);

while(mysqli_fecth_assoc($query) as $row){
    echo '<pre>'.print_r($row, true).'</pre>';
}

?>
于 2013-09-17T18:21:41.147 回答
1

您应该能够在单个查询中获取所有数据,然后对其进行过滤:

$key_query = "SELECT configuration_key , configuration_value FROM configuration WHERE configuration_group_id = 6501      AND configuration_key = 'RCS_SKIP_DAYS' OR configuration_key = 'RCS_BASE_DAYS' or configuration_key = 'RCS_EMAIL_TTL';"

此外,您似乎只是在寻找一个 configuration_value,所以只需询问该列。

按照建议,使用最新的 MySQL PDO 驱动程序。

于 2013-09-17T17:45:25.833 回答