文章 Michael Lei · 二月 23, 2022 阅读大约需 2 分钟 用确定的Global名字为数据存储创建类Creating Class With a Certain Global Name For Data Storage 开发者们大家好! 你可能已经注意到了在IRIS 2021 Global的名字是随机的。 如果你用DDL来创建类而且想给Global一个确定的名字,实际上是可以做的。 在CREATE Table 里使用 WITH %CLASSPARAMETER DEFAULTGLOBAL='^GLobalName' ,如文档。参考以下例子: #SQL #Globals #提示和技巧 #数据模型 #InterSystems IRIS 0 0 0 119
文章 姚 鑫 · 三月 11, 2022 阅读大约需 5 分钟 第七十八章 SQL函数 $LENGTH 第七十八章 SQL函数 $LENGTH 返回字符串中字符数或分隔子字符串数的字符串函数。 大纲 $LENGTH(expression[,delimiter]) 参数 expression - 目标字符串。它可以是数值、字符串文字、任何变量的名称或任何有效的表达式。 delimiter - 可选 — 在目标字符串中划分不同子字符串的字符串。它必须是字符串文字,但可以是任意长度。括起来的引号是必需的。 $LENGTH 返回 SMALLINT 数据类型。 #SQL #Caché 0 0 0 177
文章 姚 鑫 · 三月 27, 2022 阅读大约需 2 分钟 第九十四章 SQL函数 %MINUS 第九十四章 SQL函数 %MINUS 将数字转换为规范整理格式,然后反转符号的整理函数。 大纲 %MINUS(expression) %MINUS expression 参数 expression - 表达式,可以是列名、数字或字符串文字、算术表达式或另一个函数的结果,其中基础数据类型可以表示为任何字符类型。 描述 %MINUS 将数字或数字字符串转换为规范形式,反转符号,然后以数字排序规则返回这些表达式值。 %MINUS 和 %PLUS 在功能上是相同的,只是 %MINUS 反转了符号。它为解析为正数的任何数字添加减号前缀,并从解析为负数的任何数字中删除减号。零从不签名。 #SQL #Caché 0 0 0 64
文章 姚 鑫 · 四月 12, 2022 阅读大约需 2 分钟 第110章 SQL函数 POWER 第110章 SQL函数 POWER 一个数值函数,它返回给定表达式的指定幂的值。 大纲 POWER(numeric-expression,power) {fn POWER(numeric-expression,power)} 参数 numeric-expression - 基数。可以是正整数或负整数或小数。 power - 指数,它是数值表达式的幂。可以是正整数或负整数或小数。 POWER 返回 NUMERIC 或 DOUBLE 数据类型。如果 numeric-expression 是数据类型 DOUBLE,则 POWER 返回 DOUBLE;否则,它返回 NUMERIC。 #SQL #Caché 0 0 0 80
文章 姚 鑫 · 四月 27, 2022 阅读大约需 1 分钟 第125章 SQL函数 SIGN 第125章 SQL函数 SIGN 返回给定数值表达式符号的数值函数。 大纲 SIGN(numeric-expression) {fn SIGN(numeric-expression)} 参数 numeric-expression - 要为其返回符号的数字。 SIGN 返回 SMALLINT 数据类型。 #SQL #Caché 0 0 0 64
文章 姚 鑫 · 五月 13, 2022 阅读大约需 5 分钟 第141章 SQL函数 TO_CHAR(二) 第141章 SQL函数 TO_CHAR(二) 可以使用 TO_CHAR 将以下 tochar 表达式时间值转换为格式化的时间字符串: #SQL #Caché 0 0 0 116
文章 姚 鑫 · 五月 30, 2022 阅读大约需 4 分钟 第157章 SQL函数 WEEK 第157章 SQL函数 WEEK 一个日期函数,它将一年中的第几周作为日期表达式的整数返回。 大纲 {fn WEEK(date-expression)} 参数 date-expression - 一个表达式,它是列的名称、另一个标量函数的结果,或者是日期或时间戳文字。 描述 WEEK 接受一个日期表达式,并返回该日期从年初开始的周数。 #SQL #Caché 0 0 0 111
文章 姚 鑫 · 六月 17, 2022 阅读大约需 7 分钟 第三章 锁定和并发控制(三) 第三章 锁定和并发控制(三) 升级锁 使用升级锁来管理大量锁。当锁定数组的节点时,它们是相关的,特别是当将多个节点锁定在同一下标级别时。 当给定进程在同一数组中的给定下标级别创建了超过特定数量(默认为 1000)的升级锁时, 将删除所有单独的锁名称并用新锁替换它们。新锁位于父级,这意味着数组的整个分支被隐式锁定。示例(如下所示)演示了这一点。 应用程序应在合适的情况下尽快释放特定子节点的锁(与非升级锁完全相同)。当释放锁时, 会减少相应的锁计数。当的应用程序移除足够多的锁时,会移除父节点上的锁。第二小节显示了一个示例。 锁升级示例 假设有 1000 个^MyGlobal("sales","EU",salesdate) 形式的锁,其中 salesdate 表示日期。锁表可能如下所示: #SQL #Caché 0 0 0 87
文章 姚 鑫 · 七月 4, 2022 阅读大约需 7 分钟 第十八章 使用工作队列管理器(一) 第十八章 使用工作队列管理器(一) 工作队列管理器是的一项功能,使能够通过以编程方式将工作分配给多个并发进程来提高性能。在引入工作队列管理器之前,可能已经使用 JOB 命令在应用程序中启动多个进程并使用自定义代码管理这些进程(以及任何导致的故障)。工作队列管理器提供了一个高效且直接的 API,使能够卸载流程管理。 代码在多个地方内部使用工作队列管理器。可以将它用于自己的需求,如以下部分中的高级描述。 背景 计算机硬件开发的最新创新趋向于高性能、多处理器或多核架构。与此同时,内存和网络设备的速度也只是慢慢地提高了。 开发了工作队列管理器以响应这些趋势并根据以下原则: #SQL #Caché 0 0 0 89
文章 Michael Lei · 八月 7, 2022 阅读大约需 2 分钟 最佳实践之改善日期范围查询的SQL性能 根据日期范围查询的SQL性能让你失望? 我有一个比较特别的技巧,可能会帮助你解决这个问题! (SQL开发人员讨厌这个!)* 如果你有一个类,在添加数据时记录时间戳,那么这些数据将与你的IDKEY值保持顺序--也就是说,当且仅当ID1<ID2时,表内所有ID和时间戳值的TimeStamp1<TimeStamp2--那么你可以利用这一知识来提高对时间戳范围的查询性能。 考虑一下下面这个表: Class User.TSOrder extends %Persistent { Property TS as %TimeStamp; Property Data as %String (MAXLEN=100, MINLEN=200); Index TSIdx on TS; Index Extent [type=bitmap, extent]; } 用过去30天内的30,000,000条随机行来填充,每天将得到1,000,000条行。 现在,如果我们想查询某一天的信息,你可以这样写: #Code Snippet #SQL #InterSystems IRIS for Health 0 0 0 457
文章 Michael Lei · 八月 31, 2023 阅读大约需 1 分钟 常见问题--如何根据ID重建索引 InterSystems 常见问题解答 通过在持久类(=table)定义中提供的%BuildIndices() 方法的参数中指定要重建索引的 ID 的开始值和结束值,您可以仅重建该范围内的索引。 例如,要仅针对 ID=10 到 20 重建 Sample.Person 类中的 NameIDX 索引和 ZipCode 索引,请执行以下代码(ID 范围在第 5 个和第 6 个参数中指定)。 #SQL #关系表 #对象数据模型 #提示和技巧 #索引 #Caché #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 132
文章 Hao Ma · 三月 22, 2024 阅读大约需 4 分钟 IRIS/Caché SQL优化经验分享 - Collation(排序规则) 这个帖子内容有点深。如果您读的有困难,请直接跳过这篇,对绝大多数IRIS/Caché使用者,它一点都不重要。 数据库表的Collation(排序规则)本来是一个非常简单的概念。说到它是因为曾经发现过由Collation引起的性能问题。 我试图用一句话来解释数据库的排序规则: 绝大多数数据库因为业务查询需要,保存的字符型数据是不分大小写的。当你执行一个 order by, group by, distinct,like等等条件查询时,因为这个不分大小写的collation,你得到的结果也不分大小写。例如,对名字做group by, James, james一定是在一组。 如果非要区分大小写,会在查询的时候使用一个函数 因为要操作非英语的字符集,以及可以被当作字符看待的数字类型,适应不同的排序规则,一个数据库可能有很多种Collation类型。 很简单,在表一级定义Collation的SQL语句是: #SQL #新手 #InterSystems IRIS 1 0 0 114
文章 姚 鑫 · 三月 7, 2021 阅读大约需 17 分钟 第五章 SQL定义表(二) 第五章 SQL定义表(二) 主键 InterSystems IRIS提供了两种方法来唯一标识表中的行:RowID和主键。 可选的主键是一个有意义的值,应用程序可以使用该值唯一地标识表中的行(例如,联接中的行)。主键可以是用户指定的数据字段,也可以是多个数据字段的组合。主键值必须是唯一的,但不必是整数值。 RowID是一个内部用于标识表中行的整数值。通常,主键是由应用程序生成的值,而RowID是由InterSystems IRIS生成的唯一整数值。 系统会自动创建一个主map,以使用RowID字段访问数据行。如果定义主键字段,系统将自动创建并维护主键索引。 #SQL #Caché #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 101
文章 姚 鑫 · 三月 25, 2021 阅读大约需 11 分钟 第十三章 使用动态SQL(三) 第十三章 使用动态SQL(三) 执行SQL语句 有两种使用%SQL.Statement类执行SQL语句的方法: - %Execute(),它执行以前使用%Prepare()或%PrepareClassQuery()准备的SQL语句。 - %ExecDirect(),它同时准备和执行一条SQL语句。 也可以通过使用$SYSTEM.SQL.Execute()方法执行SQL语句而无需创建对象实例。此方法既准备又执行SQL语句。它创建一个缓存的查询。下面的终端示例显示Execute()方法: #SQL #Caché #InterSystems Natural Language Processing (NLP, iKnow) #InterSystems IRIS for Health 0 0 0 144
文章 姚 鑫 · 四月 12, 2021 阅读大约需 3 分钟 第一章 SQL性能优化简介 第一章 SQL性能优化简介 InterSystems SQL支持几个特性来优化InterSystems IRIS®数据平台的SQL性能。 表定义优化 SQL性能从根本上取决于良好的数据架构。 将数据划分为多个表并在这些表之间建立关系对于高效的SQL是必不可少的。 描述了以下优化表定义的操作。 这些操作要求定义表,但不要求用数据填充表: #SQL #Caché #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 152
文章 姚 鑫 · 四月 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语句: #SQL #Caché #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 111
文章 姚 鑫 · 五月 14, 2021 阅读大约需 3 分钟 第六章 临时全局变量和IRISTEMP数据库 第六章 临时全局变量和IRISTEMP数据库 对于某些操作,可能需要全局变量的功能,而不需要无限期保存数据。例如,可能希望使用全局对某些不需要存储到磁盘的数据进行排序。对于这些操作,InterSystems IRIS提供了临时全局机制。该机制的工作方式如下: 对于应用程序名称空间,可以定义一个全局映射,以便将具有特定命名约定的全局变量映射到IRISTEMP数据库,该数据库是一个特殊的数据库,如下所述。 例如,可以定义一个全局映射,以便将名称为^AcmeTemp*的所有全局变量映射到IRISTEMP数据库。 - 当代码需要临时存储数据并再次读取它时,代码将向使用该命名约定的全局变量写入数据,并从全局变量读取数据。 例如,要保存值,代码可能会执行以下操作: set ^AcmeTempOrderApp("sortedarray")=some value 然后,稍后代码可能会执行以下操作: #SQL #Caché #Global Masters #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 105
文章 姚 鑫 · 九月 15, 2021 阅读大约需 10 分钟 第十六章 SQL命令 CREATE TABLE(三) 第十六章 SQL命令 CREATE TABLE(三) 字段数据约束 数据约束控制字段允许使用的值、字段的默认值以及数据值使用的排序规则类型。所有这些数据约束都是可选的。可以按任何顺序指定多个数据约束,并以空格分隔。 NULL和NOT NULL NOT NULL数据约束关键字指定该字段不接受空值;换句话说,每条记录都必须为该字段指定一个值。NULL和空字符串('') IRIS中是不同的值。可以在接受字符串的字段中输入空字符串,即使该字段定义了NOT NULL限制也是如此。不能在数值字段中输入空字符串。 NULL数据约束关键字显式指定此字段可以接受空值;这是字段的默认定义。 #SQL #Caché 0 0 0 271
文章 姚 鑫 · 十月 1, 2021 阅读大约需 2 分钟 第三十二章 SQL命令 DROP FUNCTION 第三十二章 SQL命令 DROP FUNCTION 删除函数 #SQL #Caché 0 0 0 95
文章 姚 鑫 · 十月 16, 2021 阅读大约需 8 分钟 第四十七章 SQL命令 GRANT(一) 第四十七章 SQL命令 GRANT(一) 向用户或角色授予特权。 #SQL #Caché 0 0 0 144
文章 姚 鑫 · 十一月 1, 2021 阅读大约需 8 分钟 第六十三章 SQL命令 ORDER BY(一) 第六十三章 SQL命令 ORDER BY(一) 指定结果集中行排序的SELECT子句。 #SQL #Caché 0 0 0 119
文章 姚 鑫 · 十一月 18, 2021 阅读大约需 9 分钟 第八十章 SQL命令 UNION 第八十章 SQL命令 UNION 组合两个或多个SELECT语句。 #SQL #Caché 0 0 0 134
文章 姚 鑫 · 十二月 6, 2021 阅读大约需 1 分钟 第六章 SQL谓词 EXISTS 第六章 SQL谓词 EXISTS 检查表中是否至少存在一个对应行。 大纲 EXISTS select-statement 参数 select-statement - 一种简单的查询,通常包含一个条件表达式。 描述 EXISTS谓词测试指定的表,通常至少测试一行是否存在。 因为EXISTS后面的SELECT语句正在被检查是否包含某些内容,所以子句通常是这样的形式: #SQL #Caché 0 0 0 88
文章 姚 鑫 · 十二月 21, 2021 阅读大约需 7 分钟 第一章 聚合函数概述 第一章 聚合函数概述 计算列的所有值并返回单个聚合值的函数。 支持聚合函数 聚合函数执行与单个列中的一个或多个值相关的任务,并返回单个值。 支持的功能有: #SQL #Caché 0 0 0 116
文章 姚 鑫 · 一月 7, 2022 阅读大约需 1 分钟 第十七章 SQL函数 ACOS 第十七章 SQL函数 ACOS 一个标量数值函数,返回给定余弦的弧余弦(以弧度为单位)。 大纲 {fn ACOS(numeric-expression)} 参数 numeric-expression - 数值在-1到1之间的数值表达式。 这是这个角的余弦值。 ACOS返回NUMERIC或DOUBLE数据类型。 如果数值表达式是数据类型DOUBLE, ACOS返回DOUBLE; 否则,返回NUMERIC。 #SQL #Caché 0 0 0 59
文章 姚 鑫 · 一月 25, 2022 阅读大约需 2 分钟 第三十四章 SQL函数 CURDATE 第三十四章 SQL函数 CURDATE 返回当前本地日期的标量日期/时间函数。 大纲 {fn CURDATE()} {fn CURDATE} 描述 CURDATE不接受任何参数。它将当前本地日期作为数据类型DATE返回。请注意,参数括号是可选的。CURDATE返回此时区的当前本地日期;它根据本地时间变量(如夏令时)进行调整。 逻辑模式下的CURDATE以$HOROLOG格式返回当前本地日期; 例如,64701。 显示模式下的CURDATE以区域设置的默认格式返回当前本地日期。 例如,在美国的区域设置为02/22/2018,在欧洲的区域设置为22/02/2018,在俄罗斯的区域设置为22.02.2018。 #SQL #Caché 0 0 0 58
文章 姚 鑫 · 二月 10, 2022 阅读大约需 2 分钟 第五十章 SQL函数 DAYOFWEEK 第五十章 SQL函数 DAYOFWEEK Date函数,它返回日期表达式的整型日期。 参数 date-expression - 日期表达式,它是列名、另一个标量函数的结果或日期或时间戳文字。 描述 DAYOFYEAR返回一个介于1到366之间的整数,该整数对应于给定日期表达式的一年中的第几天。DAYOFYAR计算闰年日期。 根据日期整数、$HOROLOG或$ZTIMESTAMP值、ODBC格式日期字符串或时间戳计算一年中的日期。 日期表达式时间戳可以是数据类型%Library.PosiTime(编码的64位有符号整数)或数据类型%Library.TimeStamp(yyyy-mm-dd hh:mm:ss.fff)。 时间戳的时间部分不计算,可以省略。 #SQL #Caché 0 0 0 81
文章 姚 鑫 · 二月 23, 2022 阅读大约需 8 分钟 第六十三章 SQL函数 IFNULL 第六十三章 SQL函数 IFNULL 测试NULL并返回适当表达式的函数。 #SQL #Caché 0 0 0 101
文章 姚 鑫 · 三月 12, 2022 阅读大约需 4 分钟 第七十九章 SQL函数 $LIST(一) 第七十九章 SQL函数 $LIST(一) 返回列表中元素的列表函数。 #SQL #Caché 0 0 0 261
文章 姚 鑫 · 三月 28, 2022 阅读大约需 3 分钟 第九十五章 SQL函数 MINUTE 第九十五章 SQL函数 MINUTE 返回日期时间表达式的分钟的时间函数。 大纲 {fn MINUTE(time-expression)} 参数 time-expression - 作为列名、另一个标量函数的结果或字符串或数字文字的表达式。它必须解析为日期时间字符串或时间整数,其中基础数据类型可以表示为 %Time、%TimeStamp 或 %PosixTime。 描述 MINUTE 返回一个整数,指定给定时间或日期时间值的分钟数。为 $HOROLOG 或 $ZTIMESTAMP 值、ODBC 格式日期字符串或时间戳计算分钟。 #SQL #Caché 0 0 0 67