SQL外链和内链有什么区别?
什么是SQL内链?
在SQL查询中,内链是指同时使用多个表中的行进行查询,这些表在查询前会先通过关联条件连接到一起,以便查询语句可以同时检索关联的信息。 一个典型的例子是SELECT ... FROM table1 INNER JOIN table2 ON table1.column1 = table2.column2;
什么是SQL外链?
当查询不仅需要关联已有的表,而且需要连接另一个表或查询的结果时,则需要使用SQL外链,其实质是连接另一个库中的表或视图。 在SQL Server和Oracle中,可以使用‘Linked Server’或‘Database Link’的功能来完成外部连接。
SQL外链和内链有什么区别?
SQL内链是指在同一数据库中的多个表之间进行查询,它可以通过单个查询语句检索相关的数据,而无需多次查询。而对于SQL外链,由于需要读取多个数据库中的数据,因此需要额外的配置和权限验证。
此外,内链的执行速度要快于外链,因为内链可以通过优化查询计划和创建索引来提高查询性能,而外链则需要通过跨越多个服务器来读取数据,因此需要更长的响应时间。
SQL外链怎么实现?
在SQL Server上实现SQL外链
在SQL Server中,可以通过‘Linked Server’的功能来设置外部连接。 首先,在所需的本地实例中使用sys.sp_addlinkedserver存储过程创建链接服务器,例如:
EXEC sys.sp_addlinkedserver @server = N'RemoteServer', @srvproduct='Oracle', @provider='OraOLEDB.Oracle', @datasrc='//192.168.1.1/ORADB';
这样就将一个名为‘RemoteServer’的链接服务器添加到本地实例中,并将其连接到ORACLE数据库。接下来,通过sys.sp_addlinkedsrvlogin存储过程创建对链接服务器的访问。 例如:
EXEC sys.sp_addlinkedsrvlogin @rmtsrvname = N'RemoteServer', @useself = N'False', @rmtuser = N'username', @rmtpassword = N'password';
这将创建一个本地登录,它使用配置的用户名和密码进行验证远程登录。现在,可以使用全局引用来访问外部链接服务器:
SELECT * FROM [RemoteServer].[ORADB].[schema].[table]
它将返回从RemoteServer的中ORADB的中dbo’schema下的表的内容。
在Oracle上实现SQL外链
在Oracle中,叫做‘Database Link’的功能可以用来实现外部连接。 最重要的是它需要经过Oracle的DBA分配名字给链接服务器。例如:
CREATE DATABASE LINK DB1 CONNECT TO user IDENTIFIED BY password USING 'database_link'
这将创建一个名为DB1的链接服务器,并将其连接到一个具有有效凭据的远程数据库。您还需要设置tnsnames.ORA文件和listener.ORA文件上的ORACLE_NET_SERVICE_NAME参数 ,这可以通过Net Configuration Assistant(NCA)工具完成。 然后可以通过使用SQL语句对其执行跨数据库查询:
SELECT * FROM [table_name]@DB1
尽管Oracle提供了类似SQL Server的功能,但是OS账户必须已知或者账户必须是全局用户才能使用外部表。