我正在尝试创建尽可能精简的脚本。当前实现需要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个配置键拉到一起并分配给变量,或者是否有更好的方法来优化它。
我感谢所有人的帮助!
答案 0 :(得分:3)
首先要停止使用这个mysql_query这个函数不推荐使用,尝试使用mysql pdo或mysql li
下一步,您可能希望更改“select *
”,这是一个很大的流程费用,请尝试指定您要选择的列。
答案 1 :(得分: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>';
}
?>
答案 2 :(得分: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驱动程序。