SQL Server涉及多表查询时用join连接比较好,还是给表之间设置主外键比较好?我是说从性能方面
展开全部
给表之间设置主外键, 你查询多表的时候, 还是要 JOIN 的啊。
表之间设置主外键,会自动创建一个索引。
所以,理论上来说,你表之间设置了主外键。
这2个表之间关联查询的时候,性能要比 没有主外键的性能要好。
表之间设置主外键,会自动创建一个索引。
所以,理论上来说,你表之间设置了主外键。
这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 行受影响)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询