文章
姚 鑫 · 三月 28, 2021 阅读大约需 7 分钟
第十三章 使用动态SQL(六)

第十三章 使用动态SQL(六)

%ObjectSelectMode = 1 Swizzling字段名称属性

下面的示例使用%ObjectSelectMode = 1进行准备,当使用字段名称属性返回值时,其类型类别为可Swizzle类型的字段(持久性类,序列类或流类)将自动发生Swizzle。转换字段值的结果是相应的对象参考(oref)。使用%Get()%GetData()方法访问字段时,InterSystems IRIS不会执行此筛选操作。在此示例中,rset.Home处于Swizzle状态,而引用同一字段的rset.%GetData(2)处于not swizzled状态:

0 0
0 29
文章
姚 鑫 · 四月 3, 2021 阅读大约需 12 分钟
第十五章 使用管理门户SQL接口(二)

第十五章 使用管理门户SQL接口(二)

过滤模式内容

Management Portal SQL界面的左侧允许查看模式(或匹配筛选器模式的多个模式)的内容
1. 通过单击SQL interface页面顶部的Switch选项,指定希望使用的名称空间。
这将显示可用名称空间的列表,可以从中进行选择。
2. 应用筛选器或从模式下拉列表中选择模式。

可以使用Filter字段通过输入搜索模式来筛选列表。
可以在一个模式或多个模式中筛选模式,或筛选表/视图/过程名(项)。
搜索模式由模式名、点(.)和项目名组成——每个名称由文字和通配符的某种组合组成。字面值不区分大小写。
通配符是:

0 0
0 29
文章
姚 鑫 · 九月 5, 2021 阅读大约需 6 分钟
第七章 SQL命令 CREATE INDEX(二)

第七章 SQL命令 CREATE INDEX(二)

UNIQUE关键字

使用UNIQUE关键字,可以指定索引中的每条记录都有一个唯一的值。
更具体地说,这确保了索引(以及包含索引的表)中的两条记录不能具有相同的排序值。
默认情况下,大多数索引使用大写字符串排序(使搜索不区分大小写)。
在本例中,值“Smith”“SMITH”被认为是相等的,而不是唯一的。
CREATE INDEX不能指定非默认索引字符串排序规则。
通过在类定义中定义索引,可以为各个索引指定不同的字符串排序规则。

可以更改名称空间的默认排序规则,使字段/属性在默认情况下区分大小写。
更改此选项需要重新编译命名空间中的所有类并重新构建所有索引。
转到Management Portal,选择Classes选项,为存储的查询选择名称空间,并使用Compile选项重新编译相应的类。
然后重建所有指数。
它们将区分大小写。

注意:当表的数据被其他用户访问时,不要重建索引。
这样做可能会导致不准确的查询结果。

0 0
0 29
文章
姚 鑫 · 十月 10, 2021 阅读大约需 3 分钟
第四十一章 SQL命令 DROP VIEW

第四十一章 SQL命令 DROP VIEW

删除视图

大纲

DROP VIEW view-name [CASCADE | RESTRICT]

参数

  • view-name 要删除的视图的名称。
    视图名可以是限定的(schema.viewname),也可以是非限定的(viewname)。
    非限定视图名接受默认模式名。
  • CASCADE RESTRICT - 可选-指定CASCADE关键字以删除引用view-name的任何其他视图。如果有另一个视图引用view-name,则指定RESTRITE将发出SQLCODE-321错误。默认值为限制。

描述

DROP VIEW命令删除视图,但不删除基础表或数据。

0 0
0 29
文章
姚 鑫 · 四月 19, 2021 阅读大约需 11 分钟
第三章 优化表(二)

第三章 优化表(二)

调整表计算值

调优表操作根据表中的代表性数据计算和设置表统计信息:
- ExtentSize,它可能是表中的实际行数(行数),也可能不是。
- 表中每个属性(字段)的选择性。
可以选择性地阻止单个属性的选择性计算。
- 属性的离群选择性,其中一个值比其他值出现得更普遍。
有效的查询可以利用离群值优化。
- 标识某些属性特征的每个属性的注释。
- 每个属性的平均字段大小。
- 表的SQL Map NameBlockCountSource of BlockCount

0 0
0 28
文章
姚 鑫 · 四月 23, 2021 阅读大约需 6 分钟
第五章 优化查询性能(二)

第五章 优化查询性能(二)

使用索引

索引通过维护常见请求数据的排序子集,提供了一种优化查询的机制。
确定哪些字段应该被索引需要一些思考:太少或错误的索引和关键查询将运行太慢;
太多的索引会降低插入和更新性能(因为必须设置或更新索引值)。

什么索引

要确定添加索引是否会提高查询性能,请从管理门户SQL接口运行查询,并在性能中注意全局引用的数量。
添加索引,然后重新运行查询,注意全局引用的数量。
一个有用的索引应该减少全局引用的数量。
可以通过在WHERE子句或ON子句条件前使用%NOINDEX关键字来防止使用索引。

应该为联接中指定的字段(属性)编制索引。左外部联接从左表开始,然后查看右表;因此,应该为右表中的字段建立索引。在下面的示例中,应该为T2.f2编制索引:

0 0
0 28
文章
姚 鑫 · 四月 15, 2021 阅读大约需 10 分钟
第二章 定义和构建索引(三)

#

第二章 定义和构建索引(三)

# 位图索引

位图索引是一种特殊类型的索引,它使用一系列位串来表示与给定索引数据值相对应的一组ID值。

位图索引具有以下重要功能:

  • 位图是高度压缩的:位图索引可以比标准索引小得多。这大大减少了磁盘和缓存的使用量。
  • 位图操作针对事务处理进行了优化:与使用标准索引相比,可以在表中使用位图索引,而不会降低性能。
  • 位图上的逻辑操作(countingANDOR)经过优化以获得高性能。
  • SQL引擎包括许多可以利用位图索引的特殊优化。

位图索引的创建取决于表的唯一标识字段的性质:

0 0
0 27
文章
姚 鑫 · 九月 9, 2021 阅读大约需 7 分钟
第十一章 SQL命令 CREATE PROCEDURE(二)

第十一章 SQL命令 CREATE PROCEDURE(二)

characteristics

用于创建方法的特征与用于创建查询的特征不同。

如果指定的特征无效,系统将生成SQLCODE -47错误。
指定重复的特征将导致SQLCODE -44错误。

可用的方法特征关键字如下:

0 0
0 27
文章
姚 鑫 · 四月 28, 2021 阅读大约需 11 分钟
第八章 解释SQL查询计划(一)

第八章 解释SQL查询计划(一)

SQL语句

这个SQL语句列表为每个表提供了SQL查询和其他操作的记录,包括插入、更新和删除。
这些SQL语句链接到一个查询计划,该链接提供冻结该查询计划的选项。

系统为每个SQL DML操作创建一条SQL语句。
这提供了一个按表、视图或过程名称列出的SQL操作列表。
如果更改表定义,可以使用此SQL Statements列表来确定每个SQL操作的查询计划是否会受到此DDL更改的影响,以及/或是否需要修改某个SQL操作。
然后,可以:

  • 确定每个SQL操作使用哪个查询计划。
    可以决定使用反映对表定义所做更改的修改后的查询计划。
    或者可以冻结当前查询计划,保留在更改表定义之前生成的查询计划。
  • 根据对表定义所做的更改,确定是否对对该表执行SQL操作的例程进行代码更改。

注意:SQL语句是一个SQL例程列表,它们可能会受到表定义更改的影响。
它不应该用作表定义或表数据更改的历史记录。

创建SQL语句操作

下面的SQL操作会创建相应的SQL语句:

0 0
0 27
文章
Muhammad Waseem · 十月 16, 2021 阅读大约需 2 分钟
如何使用HL7相應地更新結果參考範圍和異常標誌

在本文中,我將演示以下內容:

  • 使用自定義實用程序函數從數據庫更新 ReferencesRange(OBX:7) 針對 ObservationIdentifier(OBX:3.1)[TestCode]
  • 根據數據庫實用程序函數中的 ObservationIdentifier(OBX:3.1)[TestCode] 和 ObservationValue(OBX:5)[Result] 更新異常標誌 (OBX:8)
  • 基於異常標誌的路由消息 (OBX:8)

以下是主要和轉換後的 HL7 2.5 ORU_R01 消息:
 

0 1
0 27
文章
姚 鑫 · 一月 4 阅读大约需 6 分钟
第十四章 SQL窗口函数概述(一)

第十四章 SQL窗口函数概述(一)

指定用于计算聚合和排名的每行“窗口框架”的函数。

窗口函数和聚合函数

在应用WHEREGROUP byHAVING子句之后,窗口函数对SELECT查询选择的行进行操作。

窗口函数将一组行中的一个(或多个)字段的值组合在一起,并在结果集中为生成的列中的每一行返回一个值。

虽然窗口函数与聚合函数类似,因为它们将多行结果组合在一起,但它们与聚合函数的不同之处在于,它们本身并不组合行。

窗函数的语法

窗口函数被指定为SELECT查询中的选择项。
窗口函数也可以在SELECT查询的ORDER BY子句中指定。

窗口函数执行与由PARTITION by子句、ORDER by子句和ROWS子句指定的逐行窗口相关的任务,并为每一行返回一个值。
这三个子句都是可选的,但是如果指定了,必须按照以下语法中的顺序指定:

0 0
0 27
文章
姚 鑫 · 九月 21, 2021 阅读大约需 9 分钟
第二十二章 SQL命令 CREATE TRIGGER(二)

第二十二章 SQL命令 CREATE TRIGGER(二)

SQL触发器代码

如果LANGUAGE SQL(默认),被触发的语句是一个SQL过程块,包括一个SQL过程语句后跟一个分号,或者关键字BEGIN后跟一个或多个SQL过程语句,每个SQL过程语句后跟一个分号,最后以END关键字结束。

被触发的操作是原子的,它要么完全应用,要么根本不应用,并且不能包含COMMITROLLBACK语句。
关键字BEGIN ATOMIC与关键字BEGIN是同义词。

0 0
0 27
文章
姚 鑫 · 四月 12, 2021 阅读大约需 3 分钟
第一章 SQL性能优化简介

第一章 SQL性能优化简介

InterSystems SQL支持几个特性来优化InterSystems IRIS®数据平台的SQL性能。

表定义优化

SQL性能从根本上取决于良好的数据架构。
将数据划分为多个表并在这些表之间建立关系对于高效的SQL是必不可少的。

描述了以下优化表定义的操作。
这些操作要求定义表,但不要求用数据填充表:

0 0
0 27
文章
姚 鑫 · 四月 16, 2021 阅读大约需 12 分钟
第二章 定义和构建索引(四)

第二章 定义和构建索引(四)

位片索引

当数字数据字段用于某些数值运算时,位片索引用于该字段。位片索引将每个数值数据值表示为二进制位串。位片索引不是使用布尔标志来索引数值数据值(如在位图索引中那样),而是以二进制值表示每个值,并为二进制值中的每个数字创建一个位图,以记录哪些行的该二进制数字具有1。这是一种高度专门化的索引类型,可以显著提高以下操作的性能:

  • SUMCOUNTAVG Aggregate计算。(位片索引不用于COUNT(*)计算。)。位片索引不用于其他聚合函数。
  • 指定的字段 TOP n ... ORDER BY field
  • 在范围条件运算中指定的字段,WHERE field > nWHERE field BETWEEN lownum AND highnum

SQL优化器确定是否应该使用定义的位片索引。通常,优化器仅在处理大量(数千)行时才使用位片索引。

0 0
0 26
文章
姚 鑫 · 十二月 7, 2021 阅读大约需 4 分钟
第八章 SQL谓词 FOR SOME

第八章 SQL谓词 FOR SOME

确定是否根据字段值的条件测试返回记录。

大纲

FOR SOME (table [AS t-alias]) (fieldcondition)

参数

  • table - Table可以是单个表,也可以是用逗号分隔的表列表。
    括号是必须的。
  • AS t-alias - 可选-前一个表名的别名。
    别名必须是有效的标识符;
    它可以是一个分隔符。

  • fieldcondition - fieldcondition 指定一个或多个引用一个或多个字段的条件表达式。
    字段条件用括号括起来。
    可以使用AND(&)OR(!)逻辑操作符在字段条件中指定多个条件表达式。

0 0
0 26
文章
姚 鑫 · 五月 12, 2021 阅读大约需 4 分钟
第五章 管理全局变量(一)

第五章 管理全局变量(一)

管理门户提供管理全局变量的工具,系统类提供执行某些相同任务的方法。本章介绍如何使用这些工具。

一般建议

与ObjectScript命令SETMERGEKILL和其他命令一样,这里描述的工具提供了直接访问操作全局变量的权限。如果通过全局访问删除或修改,则会绕过所有对象和SQL完整性检查,并且没有撤消选项。因此,在执行这些任务时要非常小心,这一点很重要。(查看和导出不会影响数据库,并且是安全活动。)

使用本章中介绍的工具时,请确保以下事项:

  • IRIS使用哪些全局变量。并不是所有这些都被视为“系统”全局变量-也就是说,即使没有选中“系统”复选框,它们中的一些也是可见的。其中一些全局变量存储代码,包括的代码。
  • 确保知道应用程序使用哪些全局变量。

即使应用程序从不执行任何直接全局访问,应用程序也会使用全局变量。请记住,如果创建持久类,则它们的数据和任何索引都存储在全局变量中,全局变量的名称基于类名(默认情况下)。

0 0
0 24
文章
姚 鑫 · 四月 20, 2021 阅读大约需 13 分钟
第四章 缓存查询(一)

第四章 缓存查询(一)

系统自动维护已准备好的SQL语句(“查询”)的缓存。这允许重新执行SQL查询,而无需重复优化查询和开发查询计划的开销。缓存查询是在准备某些SQL语句时创建的。准备查询发生在运行时,而不是在编译包含SQL查询代码的例程时。通常,PREPARE紧跟在SQL语句的第一次执行之后,但在动态SQL中,可以准备查询而不执行它。后续执行会忽略PREPARE语句,转而访问缓存的查询。要强制对现有查询进行新的准备,必须清除缓存的查询。

所有SQL调用都会创建缓存查询,无论是在ObjectScript例程中调用还是在类方法中调用。
- 动态SQL、ODBC、JDBC和$SYSTEM.SQL.DDLImport()方法在准备查询时创建缓存查询。管理门户执行SQL接口、InterSystems SQL Shell和%SYSTEM.SQL.Execute()方法使用动态SQL,因此使用准备操作来创建缓存查询。

0 0
1 24