SELECT *
FROM tfdata,linkdata,gndata,serdata
WHERE tfdata.web = linkdata.web
AND tfdata.web = gndata.web
AND tfdata.web = serdata.web
AND tfdata.web = '"mysql_real_escape_string($uri)"'"
我觉得这种方法很慢,我想知道LEFT JOIN
会对此有所了解吗?如果是,我如何添加相同的,或者还有其他方法吗?
答案 0 :(得分:1)
您可以使用连接重写查询。它会使它更具可读性,但不会更快。
SELECT *
FROM tfdata
JOIN linkdata ON tfdata.web = linkdata.web
JOIN gndata ON tfdata.web = gndata.web
JOIN serdata ON tfdata.web = serdata.web
WHERE tfdata.web = 'some_uri'
这种语法的一个优点(但不是唯一的一个)是它可以更容易地从使用内连接更改为外连接。
要优化,我首先运行EXPLAIN SELECT ...
来检查每个表上的列web
上是否有索引,并且优化程序实际上正在使用此索引。如果索引丢失,那么添加它很可能会提高查询速度。
如果查询返回了很多行或列,那么只需返回所需的列,并且只返回前几行并实现分页,如果要查看更多行,则可以提高性能。
答案 1 :(得分:1)
您可以为要查找的单元格命名,而不是“*”。那会改善表现......
答案 2 :(得分:0)
SELECT * FROM
( SELECT * FROM tfdata WHERE tfdata.web='"mysql_real_escape_string($uri)"'") As Result1,linkdata,gndata,serdata
WHERE Result1.web = linkdata.web AND Result1.web = gndata.web AND Result1.web = serdata.web
使用内联选择来获取包含较少项目的结果表,然后将它们连接在一起。