文章
· 三月 21, 2024 阅读大约需 1 分钟
IRIS/Caché SQL优化经验分享 - Bitmap Extent

Bitmap索引是指对某个,或者某几个字段建立的bit map(位图映射)。如果是对整个表的记录,也就是表的%ID做位图映射,得到的特殊的bitmap索引在IRIS/Caché里被称为Bitmap Extent。

建立Bitmap Extent索引的目的就是加快COUNT(*)的执行。提高了多少呢? 下面两个显示的是最简单的全表查询花费的时间:

  • 不使用Bitmap Extent : 1.3810s
  • 使用Bitmap Extent: 0.0038

相差有几百倍。

0 0
0 74
文章
· 二月 15, 2022 阅读大约需 3 分钟
第五十五章 SQL函数 %EXTERNAL

第五十五章 SQL函数 %EXTERNAL

以显示格式返回表达式的格式转换函数。

大纲

%EXTERNAL(expression)

%EXTERNAL expression

参数

  • expression - 要转换的表达式。字段名、包含字段名的表达式或返回值为可转换数据类型(如DATE%LIST)的函数。不能是流字段。

描述

%EXTERNAL将表达式转换为显示格式,与当前选择模式(显示模式)无关。显示格式表示VARCHAR数据类型的数据,无论字段或数据类型LogicalToDisplay方法执行什么数据转换。

%EXTERNAL通常用于选择列表SELECT-ITEM。它可以在WHERE子句中使用,但不建议这样使用,因为使用%EXTERNAL会阻止在指定字段上使用索引。

0 0
0 73
文章
· 三月 5, 2022 阅读大约需 2 分钟
第七十二章 SQL函数 LAST_IDENTITY

第七十二章 SQL函数 LAST_IDENTITY

返回最后插入、更新、删除或读取的行的标识的标量函数。

大纲

LAST_IDENTITY()

描述

LAST_IDENTITY函数返回%ROWID局部变量值。在嵌入式SQLODBC中将%ROWID局部变量设置为一个值。动态SQL、SQL Shell或管理门户SQL界面未将%ROWID局部变量设置为值。动态SQL改为设置%ROWID对象属性。

LAST_IDENTITY函数不接受任何参数。请注意,参数括号是必需的。

LAST_IDENTITY返回受当前进程影响的最后一行的标识字段值。如果表没有标识字段,则返回受当前进程影响的最后一行的行ID(%ROWID)。返回值为数据类型INTEGER

0 0
0 73
文章
· 二月 21, 2022 阅读大约需 3 分钟
第六十一章 SQL函数 GREATEST

第六十一章 SQL函数 GREATEST

从一系列表达式中返回最大值的函数。

大纲

GREATEST(expression,expression[,...])

参数

  • expression - 解析为数字或字符串的表达式。
    对这些表达式的值进行比较。
    表达式可以是字段名、文字、算术表达式、主机变量或对象引用。
    最多可以列出140个逗号分隔的表达式。

描述

GREATEST返回逗号分隔的一系列表达式中的最大值。
表达式按从左到右的顺序求值。
如果只提供一个表达式,则GREATEST返回该值。
如果任何表达式为NULL,则GREATEST返回NULL

0 0
0 72
文章
· 六月 27, 2022 阅读大约需 7 分钟
第十二章 信号(二)- 生产者消费者示例

第十二章 信号(二)- 生产者消费者示例

下面是一系列使用信号量实现生产者/消费者场景的类。 “主”进程初始化信号量并等待用户指示活动已全部完成。生产者在循环中随机增加一个信号量值,更新之间的延迟可变。消费者尝试在随机时间从信号量中删除随机数量,也是在循环中。该示例由 5 个类组成:
- Main – 初始化环境并等待信号量上的活动完成的类。
- Counter – 实现信号量本身的类。它记录它的创建以及由于信号量在等待列表中而发生的任何回调。
- Producer – 一个类,其主要方法增加信号量值。增量是一个随机选择的小整数。完成增量后,该方法会在下一个增量之前延迟一小段随机数秒。
- Consumer 消费者——这是对生产者的补充。此类的主要方法尝试将信号量减少一个随机选择的小整数。它将递减请求添加到其等待列表中,等待时间也是随机选择的秒数。
- Util - 这个类有几个方法被示例的其他类使用。几种方法解决了为所有活动维护公共日志的问题;其他人解决了多个消费者和多个生产者的命名问题。

0 0
0 72
文章
· 九月 18, 2021 阅读大约需 4 分钟
第十九章 SQL命令 CREATE TABLE(六)

第十九章 SQL命令 CREATE TABLE(六)

WITH子句,%CLASSPARAMETER关键字,STORAGETYPE关键字

可选的WITH子句可以在表格元素逗号结尾的圆括号之后和Shard Key定义(如果存在的话)之后指定。
WITH子句可以包含一个用逗号分隔的列表:
- 一个或多个%CLASSPARAMETER 子句。
- STORAGETYPE子句

0 0
0 72
文章
· 一月 10, 2022 阅读大约需 1 分钟
第二十章 SQL函数 ATAN

第二十章 SQL函数 ATAN

一个标量数值函数,返回角的正切的弧切值(以弧度为单位)。

大纲

{fn ATAN(numeric-expression)}

参数

  • numeric-expression - 一个数值表达式。
    这是这个角的正切。

ATAN返回NUMERICDOUBLE数据类型。
如果数值表达式是数据类型DOUBLE, ATAN返回DOUBLE;
否则,返回NUMERIC

0 0
0 72
文章
· 二月 27, 2022 阅读大约需 2 分钟
第六十七章 SQL函数 ISNUMERIC

第六十七章 SQL函数 ISNUMERIC

测试有效数字的数值函数。

大纲

ISNUMERIC(check-expression)

参数

  • check-expression - 要计算的表达式。

ISNUMERIC返回SMALLINT数据类型。

0 0
0 72
文章
· 九月 24, 2021 阅读大约需 4 分钟
第二十五章 SQL命令 CREATE VIEW(二)

第二十五章 SQL命令 CREATE VIEW(二)

通过视图更新

视图可用于更新视图所基于的表。可以通过视图插入新行,更新通过视图看到的行中的数据,以及删除通过视图看到的行。如果CREATE VIEW语句指定了此功能,则可以为视图发出INSERTUPDATEDELETE语句。要允许通过视图进行更新,请在定义视图时指定WITH CHECK选项(默认值)。

注意:如果视图基于分片表,则不能通过WITH CHECK OPTION视图进行INSERTUPDATEDELETE操作。
尝试这样做会导致一个SQLCODE -35,其中%msg INSERT/UPDATE/DELETE not allowed for view (sample.myview) based on sharded table with check option conditions

0 0
0 72
文章
· 十一月 25, 2021 阅读大约需 4 分钟
第八十七章 SQL命令 VALUES

第八十七章 SQL命令 VALUES

指定字段中使用的数据值的INSERT/UPDATE子句。

大纲

(field1{,fieldn})
     VALUES (value1{,valuen})

参数

  • field - 字段名或以逗号分隔的字段名列表。
  • value - 值或以逗号分隔的值列表。
    每个值被赋给相应的字段。

描述

VALUES子句用于INSERTUPDATEINSERT or UPDATE语句中,以指定要插入到字段中的数据值。
通常:

0 0
0 72
文章
· 五月 10, 2021 阅读大约需 5 分钟
第四章 多维存储的SQL和对象使用(二)

第四章 多维存储的SQL和对象使用(二)

索引

持久化类可以定义一个或多个索引;其他数据结构用于提高操作(如排序或条件搜索)的效率。InterSystems SQL在执行查询时使用这些索引。InterSystems IRIS对象和SQL在执行INSERTUPDATEDELETE操作时自动维护索引内的正确值。

标准索引的存储结构

标准索引将一个或多个属性值的有序集与包含属性的对象的对象ID值相关联。

例如,假设我们定义了一个简单的持久化MyApp.Person类,该类具有两个文本属性和一个关于其Name属性的索引:

0 0
0 72
文章
· 三月 19, 2022 阅读大约需 4 分钟
第八十六章 SQL函数 $LISTLENGTH

第八十六章 SQL函数 $LISTLENGTH

返回指定列表中元素数量的列表函数。

大纲

$LISTLENGTH(list)

参数

  • list- 计算结果为有效列表的表达式。列表是包含一个或多个元素的编码字符串。您可以使用 SQL 或 ObjectScript 的 $LISTBUILD$LISTFROMSTRING 函数创建列表。您可以使用 SQL 或 ObjectScript $LIST 函数从现有列表中提取列表。

描述

$LISTLENGTH 返回列表中元素的数量。

此函数返回 SMALLINT 类型的数据。

示例

以下嵌入式 SQL 示例返回 3,因为列表中有 3 个元素:

0 0
0 72
文章
· 三月 19, 2024 阅读大约需 3 分钟
IRIS/Caché SQL优化经验分享 - 检查索引的完整性

Caché/IRIS的特点是运行Global的修改,而这个修改和SQL是无关的,因此非常容易出现数据库表数据完整性的问题,也就是表中的数据是不是符合定义的表约束。

这样的情况非常常见。有些是人为的对Global的错误修改, 有些是应用系统的事务性管理写的不对,造成事务回滚的时候破坏了索引的完整性。无论什么原因,只要使用Global操作,破坏SQL的完整性非常难以避免。结果就是SQL查询给出错误结果。

最简单的解决方法就是执行“索引检查(Validate Indices)"

我们来做个实验

- 先修改一个global: 如下图, 将Patient表的一个记录的SEX字段,从'M'改到‘F'.

运行索引检查, 结果会提示您问题在什么地方。

1 0
0 72
文章
· 十一月 2, 2021 阅读大约需 5 分钟
第六十四章 SQL命令 ORDER BY(二)

第六十四章 SQL命令 ORDER BY(二)

示例

下面的示例按照RowID的反向顺序对记录进行排序:

SELECT %ID,Name
FROM Sample.Person
ORDER BY %ID DESC

下面两个示例展示了在ORDER BY子句中指定排序列的不同方法。
下面两个查询是等价的;
第一种方法使用列名作为排序项,第二种方法使用列号(选择项列表中项目的序号):

0 0
0 71
文章
· 五月 5, 2021 阅读大约需 6 分钟
第三章 使用多维存储(全局变量)(一)

第三章 使用多维存储(全局变量)(一)

本章描述了使用多维存储(全局变量)可以执行的各种操作。

以全局变量存储数据

在全局节点中存储数据很简单:像对待任何其他变量一样对待全局变量。
区别在于对全局变量的操作是自动写入数据库的。

创建全局变量

创建新的全局变量不需要设置工作;只需将数据设置为全局变量即可隐式创建新的全局结构。可以创建全局变量(或全局变量下标)并通过单个操作将数据放入其中,也可以创建全局变量(或下标)并通过将其设置为空字符串将其保留为空。在ObjectScript中,这些操作是使用SET命令完成的。

下面的例子定义了一个名为Color(如果还不存在)的全局变量,并将值“Red”与之关联。
如果已经存在一个名为Color的全局变量,那么这些示例将其修改为包含新信息。

在ObjectScript中:

0 0
0 71
文章
· 三月 15, 2022 阅读大约需 4 分钟
第八十二章 SQL函数 $LISTDATA

第八十二章 SQL函数 $LISTDATA

列表函数,指示指定元素是否存在并具有数据值。

大纲

$LISTDATA(list[,position])

参数

  • list - 计算结果为有效列表的表达式。列表是包含一个或多个元素的编码字符串。您可以使用 SQL 或 ObjectScript 的 $LISTBUILD$LISTFROMSTRING 函数创建列表。您可以使用 SQL 或 ObjectScript $LIST 函数从现有列表中提取列表。
  • position - 可选 — 指定列表中元素的整数表达式。

描述

$LISTDATA 检查列表中请求元素中的数据。如果位置参数指示的元素在列表中并且具有数据值,则 $LISTDATA 返回值 1。如果元素不在列表中或没有数据值,则 $LISTDATA 返回值 0。

0 0
0 71
文章
· 五月 4, 2022 阅读大约需 2 分钟
第132章 SQL函数 STR

第132章 SQL函数 STR

将数字转换为字符串的函数。

大纲

STR(number[,length[,decimals]])

参数

  • number - 解析为数字的表达式。它可以是字段名称、数字或其他函数的结果。如果指定了字段名称,则使用逻辑值。
  • length - 可选 — 一个整数,指定所需输出字符串的总长度,包括所有字符(数字、小数点、符号、空格)。默认值为 10
  • decimals - 可选 — 一个整数,指定要包含的小数点右侧的位数。默认值为 0。

描述

STR 将数字转换为 STRING 格式,根据长度和小数的值截断数字。长度参数必须足够大以包含数字的整个整数部分,并且,如果指定小数,则该小数位数加 1(用于小数点)。如果长度不够大,则 STR 将返回一个星号 (*) 字符串,该字符串等于长度。

0 0
0 71
文章
· 六月 11, 2022 阅读大约需 4 分钟
第六章 数据类型(五)

第六章 数据类型(五)

数据类型的整数代码

在查询元数据和其他上下文中,为列定义的数据类型可以作为整数代码返回。 CType(客户端数据类型)整数代码列在 %SQL.StatementColumn clientType 属性中。

ODBC 和 JDBC 使用 xDBC 数据类型代码 (SQLType)。 ODBC 数据类型代码由 %SQL.Statement.%Metadata.columns.GetAt() 方法返回,如上例所示。 SQL Shell 元数据还返回 ODBC 数据类型代码。 JDBC 代码与 ODBC 代码相同,除了时间和日期数据类型的表示。下面列出了这些 ODBC 和 JDBC 值:

0 0
0 70
文章
· 四月 13, 2022 阅读大约需 1 分钟
第111章 SQL函数 PREDICT

第111章 SQL函数 PREDICT

IntegratedML 函数,它应用指定的训练模型来预测提供的每个输入行的结果。

大纲

PREDICT(model-name )

PREDICT(model-name USE trained-model-name )

PREDICT(model-name WITH feature-columns-clause )

PREDICT(model-name USE trained-model-name WITH feature-columns-clause )

描述

PREDICT 是一个 IntegratedML 函数,可用作 SELECT 选择项以返回将经过训练的机器学习模型应用于指定查询的结果。

0 0
0 70
文章
· 十月 6, 2021 阅读大约需 2 分钟
第三十七章 SQL命令 DROP ROLE

第三十七章 SQL命令 DROP ROLE

删除角色

大纲

DROP ROLE role-name

参数

  • role-name - 要删除的角色的名称。名称是一个标识符。角色名称不区分大小写。

描述

DROP ROLE语句删除角色。删除角色时, IRIS会将其从已授予该角色的所有用户和角色中撤消,并将其从数据库中删除。

可以通过调用$SYSTEM.SQL.Security.RoleExists()方法来确定角色是否存在。如果尝试删除不存在(或已被删除)的角色,则DROP ROLE将发出SQLCODE-118错误。

0 0
0 70
文章
· 三月 3, 2022 阅读大约需 4 分钟
第七十章 SQL函数 $JUSTIFY

第七十章 SQL函数 $JUSTIFY

在指定宽度内右对齐值的函数,可以选择舍入到指定的小数位数。

大纲

$JUSTIFY(expression,width[,decimal])

参数

  • expression - 要右对齐的值。它可以是数字值、字符串文字或解析为数字或字符串的表达式。
  • width - 表达式要在其中右对齐的字符数。正整数或计算结果为正整数的表达式。
  • decimal - 可选-小数位数。正整数或计算结果为正整数的表达式。将表达式中的小数位数四舍五入或填充到此值。如果指定DECIMAL,会将表达式视为数字。

描述

$JUSTIFY返回在指定宽度内右对齐的表达式指定的值。可以包括小数参数以在宽度内小数对齐数字。

0 0
0 70
文章
· 五月 2, 2022 阅读大约需 2 分钟
第130章 SQL函数 SQRT

第130章 SQL函数 SQRT

返回给定数值表达式的平方根的数值函数。

大纲

SQRT(numeric-expression)

{fn SQRT(numeric-expression)}

参数

  • numeric-expression - 解析为计算平方根的正数的表达式。

SQRT 返回 NUMERICDOUBLE 数据类型。如果 numeric-expression 是数据类型 DOUBLE,则 SQRT 返回 DOUBLE;否则,它返回 NUMERIC。

0 0
0 70
文章
· 六月 3, 2022 阅读大约需 2 分钟
第161章 SQL函数 YEAR

第161章 SQL函数 YEAR

返回日期表达式的年份的日期函数。

大纲

YEAR(date-expression)

{fn YEAR(date-expression)}

参数

  • date-expression - 计算结果为 日期整数、ODBC 日期字符串或时间戳的表达式。此表达式可以是列名、另一个标量函数的结果或日期或时间戳字面量。

描述

YEAR 将日期整数($HOROLOG 日期)、ODBC 格式日期字符串或时间戳作为输入。 YEAR 以整数形式返回相应的年份。

日期表达式时间戳可以是数据类型 %Library.PosixTime(编码的 64 位有符号整数),也可以是数据类型 %Library.TimeStamp (yyyy-mm-dd hh:mm:ss.fff)。

0 0
0 70
文章
· 六月 25, 2022 阅读大约需 2 分钟
第十章 设置结构化日志记录(二)

第十章 设置结构化日志记录(二)

注:IRIS有,Cache无。

启用结构化日志记录

^LOGDMN 例程允许管理结构化日志记录;还有一个基于类的 API,将在下一节中介绍。

要使用 ^LOGDMN 启用结构化日志记录:

  1. 打开终端并输入以下命令:
set $namespace="%sys"
do ^LOGDMN

这将启动一个带有以下提示的例程:

0 0
0 70