我工作的公司在我们的网站上有一个内部管理方面。我注意到它的运行速度很慢,我假设它不是因为我们数据库的一面,而是我们调用它们并将它们渲染到屏幕的方式。我将列出一个我们渲染东西的过程的例子,希望有人可以告诉我我们在哪里做得很低效,以帮助加快渲染加载时间。
//Student Page:
Avg. Loading Time: 5 - 6 seconds
//table_user:
Columns Records
45 16,412
//table_use_course:
Columns Records
22 18,623
//Indexing:
Comment: We use plesk (phpmyadmin) and this is where I did the indexing.
I indexed all primary and foreign keys and it looks like this:
//Query:
SELECT a.account_id, user_id, user_first_name, user_last_name
FROM table_user a
INNER JOIN table_user_course b ON a.account_id = b.account_id
WHERE user_active = 'yes' AND b.product_type_id = '1'
ORDER BY user_first_name ASC LIMIT 0, 30
//Query Results:
Columns Records
4 30
//How we render:
if(is_array($query_results)){
foreach($querY_results as $student){
$text .= $student['user_first_name'], $student['user_last_name'], etc.
}
}
其他想法:
我们确实有一个具有相同代码和数据库结构的测试站点,数据库中的数据少得多。测试站点运行得更快,这使我想到它是如何从数据库中提取它的。另一方面,16k-18k的记录并不是那么多,我对测试站点和实际站点之间的加载时间差异感到惊讶。
非常感谢有关如何让事情更快地运行的任何帮助或建议!
答案 0 :(得分:0)
在建立索引时,需要关注inner
部分中使用的列...在您的情况下:
table_user.account_id
table_user_course.account_id
在两个表格中。尝试并澄清你是否已经完成
示例:
ALTER TABLE `TABLE_NAME` ADD INDEX `INDEX_NAME` (`COLUMN_NAME`)
来源:How do I add indices to MySQL tables?
对于您的情况,请使用:
SHOW INDEX FROM [TABLE_NAME]; (For checking the indexes in your tables)
并添加(仅当它们不存在时):
ALTER TABLE `table_user` ADD INDEX `INDEX_NAME` (`account_id`);
ALTER TABLE `table_user_course` ADD INDEX `INDEX_NAME` (`account_id`);
答案 1 :(得分:0)
也许性能问题不在数据库上。使用www.xdebug.org跟踪页面执行情况,它将告知源代码中的每一行,执行时间和内存使用情况。