日期:2014-05-17  浏览次数:20687 次

关于一个设计思路
本帖最后由 top8843 于 2013-07-17 20:17:39 编辑
一个基本的用于构建树的表,字段:ID,Title,ParentID,需要输出如下数据:ID,Title,IsParent(是否包含子节点),于是我在表里增加了bit型字段IsParent,SQL语句为:

SELECT ID,Title,IsParent FROM tbDept

现在我觉得IsParent这个字段不好维护,每次增删改时,都可能要涉及到IsParent 值的变动,于是,我想到了删除这个字段,而改为每次查询的时候,来计算是否包含有子节点:

SELECT ID,Title,(select count(*) FROM tbDept b WHERE b.ParentID = a.id) FROM tbDept a

我之所以先没有这个方式,是担心每次查询都要动态计算是否包含子节点,会影响性能,但刚才测试发现,两千多的数据,查询时间,几乎没有差异
所以,我想请大家给个建议,哪种方式更好?
SQL 性能优化

------解决方案--------------------
第一个性能肯定好,第二个有一次表连接,两千条数据看不出,再多点数据应该就能看出来,试试2w和20w
------解决方案--------------------
IsParent其实是冗余字段了
查询时,方便高效了
维护时,麻烦了一点,需要多维护一个属性