首页 新闻 搜索 专区 学院

sql 表设计及查询性能问题???

0
悬赏园豆:10 [已解决问题] 解决于 2013-03-24 19:40

一件衣服有多种分类,特设计以上关系表格,不知设计是否合理,请大家赐教。

====================

SELECT * FROM Pro WHERE id in (SELECT pid FROM KPC WHERE cid = 4 or cid = 5)

SELECT * FROM Pro WHERE EXISTS (SELECT pid FROM KPC WHERE KPC.pid = Pro.id and (cid = 4 or cid = 5))

以上两个查询不知那个性能好?望大家指点,如果有好的设计及好的查询语句望高手帮我写一句,谢谢。

 

 

小小池的主页 小小池 | 初学一级 | 园豆:30
提问于:2012-06-24 21:01
< >
分享
最佳答案
0

设计是合理的,不过。。。ALL-CLASS也是一对N的吧?

 

你的两条SQL语句性能都不咋的。

 

凡是使用了in、exists的语句性能都会很差,非必要,应该尽量避免这样的查询。

 

你的SQL完全可以写成:

SELECT pro.* FROM Pro inner join kpc on pro.id = kpc.pid where kpc.cid=4 or kpc.cid=5
收获园豆:10
无之无 | 大侠五级 |园豆:5085 | 2012-06-25 08:45

不错,测试挺快的

小小池 | 园豆:30 (初学一级) | 2012-06-25 12:32

连接查询性能 > exists > in 吗???

小小池 | 园豆:30 (初学一级) | 2012-06-25 12:36

@小小池: 没比较过exists和in的性能,但它们比连接查询慢是肯定的。

无之无 | 园豆:5085 (大侠五级) | 2012-06-25 14:13
其他回答(2)
0

我觉得挺合理的,第二个语句性能好些。不知专家意见如何,期待关注。期待解释!

格子_YY | 园豆:202 (菜鸟二级) | 2012-06-24 22:00
0

建议建立brand表 否则后期分类表会很混乱

﹏Sakura | 园豆:220 (菜鸟二级) | 2012-06-25 12:45

什么是brand表?

支持(0) 反对(0) 小小池 | 园豆:30 (初学一级) | 2012-06-25 12:46

@小小池: 品牌和分类应该没关系的 品牌应该只和产品有联系

好比现在把耐克放到分类表中。 但是以后要分类细化成 耐克鞋子 耐克上衣怎么办呢。

支持(0) 反对(0) ﹏Sakura | 园豆:220 (菜鸟二级) | 2012-06-25 12:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册