所以我有
一个朋友网站,我正在努力帮助他优化查询
因为他收到了来自主持人的电子邮件,他的网站也是eating
很多资源。所以看着我在想的这个问题,有什么办法吗?
这可以更快或更聪明(消耗更少的时间或更少的内存)我不这样做
知道哪种方法可能是准备好的陈述或者一些
改进现行法规。
$query=@mysql_query("
SELECT
tl.title,
tl.dt,
tk.nr as nr2,
tk.name as cat,
tf.name,
tf.type,
tf.alt,
tt.trupi
FROM
".$tab['news']." as tl,
".$tab['category']." as tk,
".$tab['foto']." as tf,
".$tab['entry']." as th,
".$tab['body']." as tt
WHERE
tl.nr = '$nr' AND
tl.foto = tf.nr AND
tl.kategoria = tk.nr AND
tl.hyrja = th.nr AND
tl.trupi = tt.nr");
我很感激你的所有建议, 谢谢。
答案 0 :(得分:2)
首先,您可以使用ANSI 92连接语法。
结合删除两个字母的首字母缩略词,这样可以使您的查询更清晰。
答案 1 :(得分:1)
也许试试......
$nr = mysql_real_escape_string( $nr );
$tab['category'] = mysql_real_escape_string( $tab['category'] );
$tab['foto'] = mysql_real_escape_string( $tab['foto'] );
$tab['entry'] = mysql_real_escape_string( $tab['entry'] );
$tab['body'] = mysql_real_escape_string( $tab['body'] );
$query = @mysql_query("
SELECT
tl.title,
tl.dt,
tk.nr as nr2,
tk.name as cat,
tf.name,
tf.type,
tf.alt,
tt.trupi
FROM
".$tab['news']." as tl
LEFT JOIN ".$tab['category']." as tk ON ( tk.nr = tl.kategoria )
LEFT JOIN ".$tab['foto']." as tf ON ( tf.nr = tl.foto )
LEFT JOIN ".$tab['entry']." as th ON ( th.nr = tl.hyrja )
LEFT JOIN ".$tab['body']." as tt ON ( tt.nr = tl.trupi )
WHERE
tl.nr = '$nr'");
注意在SQL字符串中使用变量之前转义变量(参见Bobby Tables。)
要记住的另一件事是整个数据库的设计。如果表之间存在“一对一”关系的任何实例,则应将这两个表折叠为单个表等。
答案 2 :(得分:0)
无需使用每个表格,也可以使用Explain
来检查查询的最佳效果,您可以在此处找到一个很好的指南http://www.databasejournal.com/features/mysql/article.php/1382791/Optimizing-MySQL-Queries-and-Indexes.htm,了解如何解释解释的结果< / p>
查询的所有添加操作都会以某种方式降低性能,但我认为瓶颈是连接本身以及关联表的方式。在将一个表与另一个表相关联时尝试使用整数(ids),如果不可能,请确保将与之相关的列编入索引。这肯定会增加你的查询。