我要查询SQL查询
SELECT child.name,(COUNT(parent.name) - (parentDepth.depth + 1)) AS depth
from category as child,category as parent,category as sub_parent,
( select child.name,(count(parent.name)-1) as depth from category as child,category as parent where child.lft between parent.lft and parent.rgt and child.name='ELECTRONICS' ) as parentDepth
where child.lft between parent.lft and parent.rgt and child.lft between sub_parent.lft and sub_parent.rgt and sub_parent.name=parentDepth.name
group by child.name having depth >0 order by child.lft
USE JOIN
SELECT child.name,(COUNT(parent.name) - (parentDepth.depth + 1)) AS depth from
category as child join category as parent on child.lft between parent.lft and parent.rgt join category as sub_parent on child.lft between sub_parent.lft and sub_parent.rgt,
( select child.name,(count(parent.name)-1) as depth from category as child,category as parent where child.lft between parent.lft and parent.rgt and child.name='ELECTRONICS' ) as parentDepth
where sub_parent.name=parentDepth.name
group by child.name having depth >0 order by child.lft
我想知道一个更好!我的意思是性能和速度
答案 0 :(得分:1)
如果存在差异,性能差异将是绝对最小的。基本上,,
- 语法只不过是编写连接的简短形式,因此唯一的区别是用于“解析”语句的时间。要在数据库上获得更好的性能,还有很多重要的事情要做,比如
答案 1 :(得分:0)
在查询之前使用EXPLAIN来获取有关MySQL将如何执行查询,将使用哪些表,将读取多少行,利用哪些索引等信息......
其他解决方案是多次运行此查询(假设为100)并测量平均响应时间。
查看你的问题让我觉得你可能会写得更好(但不确定 - 乍一看太复杂了。)
答案 2 :(得分:0)
我更喜欢实际测试和获取数据而不是猜测(即使一个人的推理似乎合理)。
在单个查询级别,可以使用SHOW PROFILE语句显示在当前会话过程中执行的语句的分析信息:
http://dev.mysql.com/doc/refman/5.1/en/show-profiles.html
这将让您了解查询在MySQL数据库上运行的时间(即查询的持续时间或速度)。当然,在应用程序级别上,可能还有其他问题。
关于如何优化MySQL的一般概述,一本值得一看的有趣的书是Baron Schwartz等人的“高性能MySQL”,由O'Reilly Media,Inc。出版(ISBN:9780596101718){ {3}}
本书详细介绍了如何解释EXPLAIN语句的输出,以及许多其他有用的主题。