您好我编写了以下代码来从数据库中检索数据,但它的执行速度太慢,任何人都可以查看它并提供一些优化技巧以获得更好的性能。
真正发生的是通过绑定来自其他几个表的现有当前数据来创建一个新表。
$table_count = mysql_query("SELECT TABLE_NAME FROM information_schema.tables
WHERE table_schema = 'datamatrix'
AND table_name
LIKE 'tracking_%' ");
while($row = mysql_fetch_array($table_count)){
$trackingtable = $row["TABLE_NAME"];
$update = mysql_query("SELECT id as unp FROM $trackingtable");
$col = mysql_fetch_assoc($update);
$col_id = ($col["unp"]);
$var1 = mysql_query("SELECT useragent as ua
FROM trackpanel
WHERE id = $col_id");
$col_ua = ($var1["ua"]);
$browser = get_browser($col_ua, true);
$new_timestamp = mysql_query("SELECT TIMESTAMP FROM $trackingtable
ORDER BY TIMESTAMP
DESC LIMIT 1");
$col_new = mysql_fetch_assoc($new_timestamp);
$new_timestamp1 = mysql_query("SELECT TIMESTAMP FROM $trackingtable
ORDER BY TIMESTAMP
ASC LIMIT 1");
$col_old = mysql_fetch_assoc($new_timestamp1);
mysql_query("
INSERT INTO report (`trackingID`,`trackname`,`accountname`,`accountID`, `status`, `clickcount`, `earliest_click`,`recent_click`,`platform`,`device`,`browser`,`browser_version`)
SELECT b.trackingID, `trackname`, accountname, c.accountID, status, total_clicks,'".$col_new['TIMESTAMP']."','".$col_old['TIMESTAMP']."','".$browser['platform']."','".$browser['device_name']."','".$browser['browser']."','".$browser['version']."'
FROM $trackingtable a, datamat b, trackaccounts c
WHERE a.timestamp > DATE_ADD(NOW(), INTERVAL -2 YEAR) AND a.trackingID = b.trackingID AND b.accountID = c.accountID")
or die(mysql_error());
}
?>
答案 0 :(得分:0)
在不知道数据库的设置和索引方式以及您正在使用的表存储引擎的情况下,我只能猜测为什么它的速度很慢。
列表的第二部分和第三部分针对从第一个查询循环的每一行运行。如果您的表是InnoDB,则选择将更慢,而插入更快。 MyISAM对面也是如此。
每个查询都有自己的延迟,因为它会单独查询数据库。最好在while循环中组合第1,第3和第4个查询,因为它们查询同一个表。
我认为插入和选择查询最有可能是最慢的,因为它加入了3个表。那个选择的查询肯定可以优化。
答案 1 :(得分:0)
您的查询速度缓慢的唯一原因是您的跟踪表上缺少索引,即使您没有指定哪个查询速度很慢。
检查
上的索引是否存在