SQL Server涉及多表查询时用join连接比较好,还是给表之间设置主外键比较好?我是说从性能方面

 我来答
wangzhiqing999
2011-03-28 · TA获得超过1.6万个赞
知道大有可为答主
回答量:7048
采纳率:100%
帮助的人:3345万
展开全部
给表之间设置主外键, 你查询多表的时候, 还是要 JOIN 的啊。
表之间设置主外键,会自动创建一个索引。

所以,理论上来说,你表之间设置了主外键。
这2个表之间关联查询的时候,性能要比 没有主外键的性能要好。
追问
我看了discuz就用了join连接多表,如果两个表之间有主外键,就不用join连接了呀
追答
我那是拿个例子说明一下:

-- 创建测试主表. ID 是主键.
CREATE TABLE test_main (
id INT,
value VARCHAR(10),
PRIMARY KEY(id)
);

-- 创建测试子表.
CREATE TABLE test_sub (
id INT,
main_id INT,
value VARCHAR(10),
PRIMARY KEY(id)
);

-- 插入测试主表数据.
INSERT INTO test_main(id, value) VALUES (1, 'ONE');
INSERT INTO test_main(id, value) VALUES (2, 'TWO');

-- 插入测试子表数据.
INSERT INTO test_sub(id, main_id, value) VALUES (1, 1, 'ONEONE');
INSERT INTO test_sub(id, main_id, value) VALUES (2, 2, 'TWOTWO');

1> SELECT
2> test_main.value AS MainValue,
3> test_sub.value AS SubValue
4> FROM
5> test_main JOIN test_sub
6> ON (test_main.id = test_sub.main_id)
7> go
MainValue SubValue
---------- ----------
ONE ONEONE
TWO TWOTWO

(2 行受影响)

-- 增加外键
ALTER TABLE test_sub ADD CONSTRAINT main_id_cons FOREIGN KEY (main_id) REFERENCES test_main;

增加外键后,检索2表,不加 JOIN 的处理
1> SELECT
2> test_main.value AS MainValue,
3> test_sub.value AS SubValue
4> FROM
5> test_main, test_sub
6> go
MainValue SubValue
---------- ----------
ONE ONEONE
TWO ONEONE
ONE TWOTWO
TWO TWOTWO

(4 行受影响)
蓝灵飘雪
2011-03-28 · TA获得超过266个赞
知道小有建树答主
回答量:313
采纳率:0%
帮助的人:250万
展开全部
2个概念,
设置主外键关联是为了在数据上保证2者的数据是有关联的。
比如A(主键)和B(外键)之间设置主外键关联,那么B的数值必须是A里面已有的,否则不允许insert
理论上,如果你程序UI和逻辑设置严格,可以不设置主外键关联。但是实际操作中,还是建议加上去

而join则主要是在多表查询时定义2个表之间的关系。不是一个概念。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式