赞
踩
写在前面
InterSystems IRIS
提供高性能、功能齐全的 SQL
。您可以将 SQL 与 InterSystems IRIS 结合使用,其规模从在单个 CPU 内核上运行的查询,到使用数十个内核的并行查询,再到跨 InterSystems IRIS 服务器集群的分布式查询。
InterSystems IRIS 中各种规模的 SQL 功能包括:
InterSystems SQL 提供了强大的工具来实现最佳的 SQL 查询性能。其中一个工具是压缩位图索引
:使用紧凑,高效的结构和矢量化的CPU指令,InterSystems SQL可以执行聚合并检查每秒数十亿行的逻辑条件,只需一个内核。
InterSystems SQL
提供了一整套标准关系功能,包括定义表架构、执行查询以及定义和执行存储过程的功能。
SQL shell
接口以编程方式执行 InterSystems SQL。嵌入式 SQL
使您能够在 ObjectScript 代码中嵌入 SQL 语句,Dynamic SQL
使您能够在运行时从 ObjectScript 执行动态 SQL 语句。1. 优点
InterSystems SQL
为存储在 InterSystems IRIS®
数据平台数据库中的数据提供不折不扣的标准关系访问
。
InterSystems SQL具有以下优点:
高性能和可扩展性 — InterSystems SQL 提供的性能和可扩展性优于其他关系数据库产品。此外,InterSystems SQL在各种硬件和操作系统上运行;从笔记本电脑到高端多CPU系统。
与 InterSystems IRIS 对象技术集成 — InterSystems SQL 与 InterSystems IRIS 对象技术紧密集成。您可以混合使用关系访问和对象访问数据,而不会牺牲任何一种方法的性能。
低维护 — 与其他关系数据库不同,InterSystems IRIS 应用程序不需要在已部署的应用程序中重建索引和表压缩。
支持标准 SQL 查询 — InterSystems SQL 支持 SQL-92 标准语法和命令。在大多数情况下,您可以将现有的关系应用程序迁移到 InterSystems IRIS,而这并不困难,并自动利用 InterSystems IRIS 的更高性能和对象功能。
您可以将 InterSystems SQL 用于多种用途,包括:
基于对象和 Web 的应用程序 — 您可以在 InterSystems IRIS 对象和 Web Server 页面应用程序中使用 SQL 查询来执行强大的数据库操作,如查找和搜索。
联机事务处理 — InterSystems SQL 为插入和更新操作以及事务处理应用程序中常见的查询类型提供了出色的性能。
商业智能和数据仓库 — InterSystems IRIS 多维数据库引擎和位图索引技术的结合使其成为数据仓库式应用程序的绝佳选择。
即席查询和报告 — 您可以使用 InterSystems SQL 附带的全功能 ODBC 和 JDBC 驱动程序连接到常用的报告和查询工具。
企业应用程序集成 — InterSystems SQL 网关可让您对存储在符合 ODBC 或 JDBC 标准的外部关系数据库中的数据进行无缝的 SQL 访问。这使得在InterSystems IRIS应用程序中集成来自各种来源的数据变得容易。
2. 构成
InterSystems SQL的核心由以下组件组成:
统一数据字典 — 存储为一系列类定义的所有元信息的存储库。InterSystems IRIS 自动为统一字典中存储的每个持久性类创建关系访问(表)。
SQL 处理器和优化器 — 一组程序,用于分析 SQL 查询,确定给定查询的最佳搜索策略(使用基于开销的复杂优化器),并生成执行查询的代码。
InterSystems SQL Server
— 一组 InterSystems IRIS 服务器进程,负责与 InterSystems ODBC 和 JDBC 驱动程序的所有通信。它还管理常用查询的缓存;当多次执行同一查询时,可以从查询缓存中检索其执行计划,而不必再次由优化程序处理。
3. 特征
InterSystems SQL包括一整套标准的关系功能。这些包括:
定义表和视图(DDL 或数据定义语言)的能力。
对表和视图执行查询的功能(DML 或数据操作语言)。
执行事务的能力,包括插入、更新和删除操作。执行并发操作时,系统间 SQL 使用行级锁。
能够定义和使用索引以实现更高效的查询。
能够使用各种数据类型,包括用户定义的类型。
定义用户和角色并为其分配权限的能力。
定义外键和其他完整性约束的能力。
定义插入、更新和删除触发器的功能。
定义和执行存储过程的能力。
以不同格式返回数据的能力:用于客户端访问的ODBC模式;在基于服务器的应用程序中使用的显示模式。
4. SQL-92
SQL-92
标准在算术运算符优先级方面不精确;关于这个问题的假设在SQL实现中有所不同。InterSystems SQL 支持为以下系统范围的 SQL 算术运算符优先级的替代方法之一配置系统
:
InterSystems SQL可以配置为以严格的从左到右的顺序解析算术表达式,没有运算符优先级
。这与 ObjectScript 中使用的约定相同。因此,3+3*5=30
。可以使用括号强制实施所需的优先级。因此,3+(3*5)=18
。
InterSystems SQL 可以配置为使用 ANSI 优先级解析算术表达式
,这为乘法和除法运算符提供了比加法、减法和串联运算符更高的优先级。因此,3+3*5=18
。如果需要,可以使用括号来覆盖此优先级。因此,(3+3)*5=30
。
SQL 运算符优先级的默认值取决于您的 InterSystems IRIS 版本
。InterSystems SQL 支持完整的入门级 SQL-92 标准,但以下情况除外:
不支持向表定义添加其他 CHECK 约束。
不支持可序列化隔离级别。
分隔标识符不区分大小写;标准规定它们应该区分大小写。
在 HAVING 子句中包含的子查询中,应该能够引用该 HAVING 子句中“可用”的聚合。这不受支持。
5. 扩展
InterSystems SQL
支持许多有用的扩展。其中许多与InterSystems IRIS
提供对数据的同时对象和关系访问这一事实有关。
其中一些扩展包括:
支持用户可定义的数据类型和函数。
用于以下对象引用的特殊语法。
支持子类化和继承。
支持对存储在其他数据库中的外部表进行查询。
用于控制用于表的存储结构以实现最佳性能的多种机制。
6. 互操作性
InterSystems SQL支持多种与其他应用程序和软件工具进行关系互操作的方法。
InterSystems IRIS 包括一个符合标准的 4 级(全纯 Java 代码)JDBC 客户端。
InterSystems JDBC 驱动程序提供以下功能:
您可以将 InterSystems JDBC
与支持 JDBC
的任何工具、应用程序或开发环境一起使用。
InterSystems SQL 的 C 语言调用级接口是 ODBC。与其他数据库产品不同,InterSystems ODBC 驱动程序是一个本机驱动程序 — 它不是建立在任何其他专有接口之上的。
系统间 ODBC 驱动程序提供以下功能:
高性能
可移植性
原生 Unicode 支持
线程安全
您可以将 InterSystems ODBC
与支持 ODBC
的任何工具、应用程序或开发环境一起使用.
在 ObjectScript
中,InterSystems SQL 支持 Embedded SQL
:将 SQL 语句放在方法(或其他代码)的正文中的能力。
routines
时编译的。因此,在运行时检查 SQLCODE
错误非常重要。还可以在编译嵌入式 SQL
的同时编译包含它的 ObjectScript routine
。嵌入式 SQL
在与 InterSystems IRIS 的对象
访问功能结合使用时,功能非常强大。例如,以下方法查找具有给定名称值的记录的 RowID:
ClassMethod FindByName(fullname As %String)
{
&sql(SELECT %ID INTO :id FROM Sample.MyTable WHERE Name = :fullname)
IF SQLCODE<0 {SET baderr="SQLCODE ERROR:"_SQLCODE_" "_%msg
RETURN baderr }
ELSEIF SQLCODE=100 {SET nodata="Query returns no data"
RETURN nodata }
RETURN "RowID="_id
}
作为其标准库的一部分,InterSystems IRIS 提供了一个 %SQL.Statement
可用于执行动态(即在运行时定义)SQL 语句的类。您可以在 ObjectScript 方法中使用 Dynamic SQL。例如,以下方法查询 21 世纪出生的指定人数。该查询选择 1999 年 12 月 31 日之后出生的所有人员,按出生日期对所选记录进行排序,然后选择前 x 条记录:
ClassMethod Born21stC(x) [ language=objectscript ]
{
SET myquery=2
SET myquery(1) = "SELECT TOP ? Name,%EXTERNAL(DOB) FROM Sample.Person "
SET myquery(2) = "WHERE DOB > 58073 ORDER BY DOB"
SET tStatement = ##class(%SQL.Statement).%New()
SET qStatus = tStatement.%Prepare(.myquery)
IF qStatus'=1 {WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT}
SET rset = tStatement.%Execute(x)
DO rset.%Display()
WRITE !,"End of data"
}
准备查询时,该查询的优化版本将存储为缓存查询。执行此缓存查询是为了后续调用查询,从而避免了每次执行查询时重新优化查询的开销。
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。