在Informix+Dynamic+Server+中创建并使用函数索引
PDO配置及使用方法

PDO配置及使⽤⽅法■PDO为何物?POD(PHP Data Object)扩展在PHP5中加⼊,PHP6中将默认识⽤PDO连接数据库,所有⾮PDO扩展将会在PHP6被从扩展中移除。
该扩展提供PHP内置类 PDO来对数据库进⾏访问,不同数据库使⽤相同的⽅法名,解决数据库连接不统⼀的问题。
我是配置在windows下做开发⽤的。
■PDO的⽬标提供⼀种轻型、清晰、⽅便的 API统⼀各种不同 RDBMS 库的共有特性,但不排除更⾼级的特性。
通过 PHP 脚本提供可选的较⼤程度的抽象/兼容性。
■PDO的特点:性能。
PDO 从⼀开始就吸取了现有数据库扩展成功和失败的经验教训。
因为 PDO 的代码是全新的,所以我们有机会重新开始设计性能,以利⽤ PHP 5 的最新特性。
能⼒。
PDO 旨在将常见的数据库功能作为基础提供,同时提供对于 RDBMS 独特功能的⽅便访问。
简单。
PDO 旨在使您能够轻松使⽤数据库。
API 不会强⾏介⼊您的代码,同时会清楚地表明每个函数调⽤的过程。
运⾏时可扩展。
PDO 扩展是模块化的,使您能够在运⾏时为您的数据库后端加载驱动程序,⽽不必重新编译或重新安装整个 PHP 程序。
例如,PDO_OCI 扩展会替代 PDO 扩展实现 Oracle 数据库 API。
还有⼀些⽤于 MySQL、PostgreSQL、ODBC 和 Firebird 的驱动程序,更多的驱动程序尚在开发。
■安装PDO版本要求:php5.1以及以后版本的程序包⾥已经带了;php5.0.x则要到下载,放到你的扩展库,就是PHP所在的⽂件夹的ext⽂件夹下;⼿册上说5.0之前的版本不能运⾏PDO扩展。
配置(Windows):修改你的php.ini配置⽂件,使它⽀持pdo.(php.ini这个东西没有弄懂的话,先弄清楚,要修改调⽤你的phpinfo()函数所显⽰的那个php.ini)把extension=php_pdo.dll前⾯的分号去掉,分毫是php配置⽂件注释符号,这个扩展是必须的。
sqlserver创建索引方法

sqlserver创建索引方法在SQL Server数据库中,索引是提高查询性能和加快数据检索速度的重要工具。
创建索引可以帮助数据库引擎在执行查询时更快地定位到所需的数据。
下面是一些创建索引的方法:1. CREATE INDEX 语句: 使用CREATE INDEX语句可以直接创建索引。
语法如下:```CREATE INDEX index_nameON table_name (column1, column2, ...)```这里,`index_name` 是要创建的索引的名称,`table_name` 是要在其上创建索引的表的名称,`column1, column2, ...` 是要为其创建索引的列的名称。
2. ALTER TABLE 语句: 使用ALTER TABLE语句也可以创建索引。
语法如下:```ALTER TABLE table_nameADD INDEX index_name (column1, column2, ...)```这里,`table_name` 是要在其上创建索引的表的名称,`index_name` 是要创建的索引的名称,`column1, column2, ...` 是要为其创建索引的列的名称。
3. SSMS (SQL Server Management Studio):对于使用SQL Server Management Studio的用户,可以通过图形化界面创建索引。
在“对象资源管理器”中找到表,右键点击并选择“设计”。
然后,在“列选择”选项卡中,选择要创建索引的列,并在“索引”选项卡中添加索引。
4. 聚集索引和非聚集索引:SQL Server支持两种类型的索引,即聚集索引和非聚集索引。
聚集索引决定了表中数据的物理存储顺序,而非聚集索引是基于聚集索引或堆表存储的。
- 聚集索引:使用CREATE INDEX或ALTER TABLE语句创建索引时,未指定索引类型时,默认创建的是聚集索引。
informix入门基础学习教程

informix入门基础学习教程Informix是一个关系型数据库管理系统(RDBMS),是IBM公司开发的一种数据库管理系统。
它具有高效、可靠、安全的特点,被广泛应用于企业级应用程序中。
本文将介绍Informix的基础知识和学习教程。
一、Informix的概述Informix是一种面向企业级应用的数据库管理系统,它提供了高性能、可扩展、可靠的数据存储和处理能力。
Informix支持多种操作系统平台,包括Windows、Linux、Unix等。
它的特点包括事务处理、并发控制、数据安全等。
二、安装和配置Informix2. 配置Informix服务器,设置数据库存储路径、内存大小等参数。
3.创建数据库实例,设置数据库名称、用户名和密码等信息。
三、Informix的基本概念1. 数据库:Informix中的数据库是一组相关表的集合,用于存储和管理数据。
2.表:表是数据库中的基本组成单元,用于存储数据。
每个表包含多个列,每个列定义了一种数据类型。
3.列:列是表中的一个字段,用于存储特定类型的数据。
4.行:行是表中的一条记录,包含了一组相关的数据。
5.索引:索引是对表中一列或多列的值进行排序的数据结构,用于提高查询性能。
6.视图:视图是一个虚拟的表,它是基于一个或多个表的查询结果。
视图可以简化复杂的查询操作。
四、基本操作1.创建数据库:使用CREATEDATABASE语句创建一个新的数据库。
2.创建表:使用CREATETABLE语句创建一个新的表,并定义表中的列和其数据类型。
3.插入数据:使用INSERTINTO语句将数据插入到表中。
4.查询数据:使用SELECT语句从表中检索数据。
5.更新数据:使用UPDATE语句修改表中的数据。
6.删除数据:使用DELETEFROM语句从表中删除数据。
7.创建索引:使用CREATEINDEX语句在表上创建索引,以提高查询性能。
8.创建视图:使用CREATEVIEW语句创建一个新的视图。
Informix数据库基本操作和常用配置

在控制台输入dbaccess,进入informix管理界面,界面的菜单就不一一解释了,选择database-create输入数据库名,以test为例,回车,dbspace选择test,回车,这一步完了用方向键移到exit选项上,退回到上级菜单,选择Create-new-database,回车即可。完成后一直exit退出管理界面,输入ontape -s -B test修改数据库test日志模式为bufferedlogging,这一步是必须的,否则数据库不支持事务,完成后即可以使用该数据库。Linux下数据库的创建和windows下的一样。简单说一下informix数据库中的四种日志模式:
1、DirtyRead(脏读)隔离
DirtyRead是最简单的隔离级,类同于无隔离级当进程在读数据据时并不对所读的数据上锁,也不管其他进程上没上锁或在做什么。
2、CommittedRead(提交后读)隔离
当进程请求CommittedRead隔离级时,OnLine保证进程得到的数据不是数据库未提交的数据即此时没有其他进程在对这些数据做修改。
U代表Unbufferd(无缓冲日志模式)
B代表bufferd(缓冲日志模式)
A代表Ansi(不常用,不能和其它日志模式转化)
还有一种是N(Nolog)(无日志模式)
各个日志模式之间用ontape -s -代码(U,B,N,A)来进行转换,但转换之前需要修改onconfig文件中的TapeDev和Ltapedev两个参数,指向/dev/null,以免在数据库模式转换的时候进行长时间的0级备份,这两个参数具体含义会在后面说到。
还有一种提高并行性的设置,使用Set Isolation to Committed Read Last Committed语句,为SET ISOLATION TO COMMITTED READ语句引入新的LAST COMMITTED关键字选项,可减少尝试读取表时发生锁定冲突的风险。采用该语句,当用户读取正在被其他用户修改的数据时不在处于锁等待状态,而是可以读取修改前最近落实版本的数据值。这样,由于不会产生锁等待,应用程序效率会显著提高,而且,由于是读取修改前最近落实版本的数据值,也不会产生读取幻象数据(phantom data)的问题,同时,也会大大减少产生死锁的现象。它只支持“行”级别锁定,它不支持以下这些表:正在被DataBlade模块(DataBlade模块是一种标准的软件模块,它可以被插入到数据库中,用以扩展其能力,使用户可以使用任何想要的数据来做任何想做的事情。用户可以融合和匹配来自第三方和Informix的DataBlade模块,或者编写自己的DataBlade模块来创建革新化的商务应用。每个DataBlade模块都包含某一特定领域数据管理的专业知识,可以简单地插入到数据库中,既可以单独使用,又可以与其他DataBlade模块一起使用。有了这种灵活性,用户就可以扩充其DBMS,来解决现在以及将来的特殊数据管理问题。)访问的表、列中具有集合数据类型的表、使用虚拟表界面创建的表、具有页面级别锁定的表、具有专用表级别锁定的表或无事务记录的数据库中的表。在跨服务器的分布式查询中,如果发出查询的会话的隔离级别具有有效的LAST COMMITTED隔离级别,但一个或多个参与操作的数据库不支持该LAST COMMITTED功能,那么整个事务符合发出该事务的会话的“已落实读”或“脏读”隔离级别,而不启用LAST COMMITTED选项。
VFP使用命令建立和操作索引文件

⼀.建⽴索引⽂件:对打开的索引⽂件,可⽤下列命令建⽴索引:格式:index on 索引关键字|tag 索引名|to 索引⽂件名说明:(1).tag 索引名:指定索引名,此索引存放在与表名相同的.cdx⽂件中。
(2).to 索引⽂件名:选择此项⽣成独⽴索引,即⼀个索引存放在⼀个索引⽂件中;否则⽣成的是结构化复合索引。
例1:建⽴“⼯资情况”表的结构化复合索引⽂件,其索引关键字分别为姓名和⼯资,⽽索引名分别为xm和gz.use ⼯资情况browseindex on 姓名 tag xmindex on ⼯资 tag gzbrowse&&分别执⾏以上命令后,⽣成了“⼯资情况.cdx”⽂件,其中存放了xm和gz两个索引。
例2:⽤“姓名”作索引关键字,建⽴“职⼯档案.dbf”的独⽴索引⽂件,⽂件名为a.idx。
use 职⼯档案index on 姓名 to hello &&执⾏此命令,检查默认⽬录e:\myvfp,会发现多了⼀个⽂件:hello.idxuse⼆.打开索引:打开表时,系统会⾃动打开结构化复合索引,但此时显⽰的仍是物理顺序。
要使索引起作⽤,必须指定主控索引。
主控索引就是控制当前显⽰顺序的索引。
也可以在打开表的同时指定主控索引。
1.打开表的同时打开索引并指定主控索引:格式:use 表名 [index 索引⽂件名] [order tag 顺序号|索引名]说明:(1).index 索引⽂件名:⽤于打开独⽴索引⽂件。
(2).order tag 顺序号|索引名:⽤于打开结构化复合索引。
其中,顺序号为该索引在复合索引⽂件中的先后顺序,即在“表设计器”的“索引”选项卡中看到的该索引的位置。
例:在命令窗⼝输⼊以下命令依次执⾏:use 职⼯档案 index hello &&打开表的同时打开独⽴索引hellobrowse &&显⽰的是按姓名索引的顺序,useuse ⼯资情况 order tag 2 &&显⽰的是gz索引的顺序,因为gz在“表设计器”中位置为2,use2.打开表后再打开索引:格式1:set index to 索引⽂件名功能:打开独⽴索引⽂件格式2:set orer to 顺序号|tag 索引名功能:打开结构化复合索引例:在命令窗⼝依次执⾏以下命令:use 职⼯档案brow &&显⽰物理顺序,set index to hello &&打开独⽴索引⽂件hello.idxbrowse &&显⽰的是按姓名索引的顺序,useuse ⼯资情况browse &&显⽰物理顺序set order to 1 &&即将xm指定为主控索引,因为xm在“表设计器”中位置为1,browse &&显⽰按姓名索引的顺序,set orer to gz &&将gz指定为主控索引browse &&显⽰的是gz索引的顺序,use三.关闭索引:格式1:set index to格式2:set order to说明:上两条命令后不加选项,可关闭当前索引。
informix常用命令详解一(包括查询表结构信息,索引信息等)

informix常用命令详解一(包括查询表结构信息,索引信息等)2011-08-03 18:27数据库文章很全的一个博客1 CREATE DATABASE database_name [WITH LOG IN “pat hname”]创建数据库。
database_name:数据库名称。
“pathname”:事务处理日志文件。
创建一database_name.dbs目录,存取权限由GRANT设定,无日志文件就不能使用BEGIN WORK等事务语句(可用START DATABASE语句来改变)。
可选定当前数据库的日志文件。
如:select dirpath form systables where tabtype = “L”;例:create databse customerdb with log in “/usr/john/log/custome r.log”;DATABASE databse-name [EXCLUSIVE]选择数据库。
database_name:数据库名称。
EXCLUSIVE:独占状态。
存取当前目录和DBPATH中指定的目录下的数据库,事务中处理过程中不要使用此语句。
例:dtabase customerdb;3. CLOSE DATABASE关闭当前数据库。
database_name:数据库名称。
此语句之后,只有下列语句合法:CREATE DATABASE; DATABASE; DROP DATABSE; ROLLF ORWARD DATABASE;删除数据库前必须使用此语句。
例:close database;4. DROP DATABASE database_name删除指定数据库。
database_name:数据库名称。
用户是DBA或所有表的拥有者;删除所有文件,但不包括数据库目录;不允许删除当前数据库(须先关闭当前数据库);事务中处理过程中不能使用此语句,通过ROLLBACK WORK 也不可将数据库恢复。
Informix数据库(增、删、改、查)操作

> load from文件insert into表
> !
插入数据(注:文件的后缀可以是.txt格式):
[test@datacenter ~]$ vim pet.txt
Clasws|Gwen|cat|m|
~
按<Esc>退出,在Normal模式下输入“:wq”(保存并退出)
> update pet
> set sex='f'
> where n='Fluffy'
> !
查看一下:
[test@datacenter ~]$ isql -s test<<!
> select * from pet
> !
n owner species sex
Fluffy Harold cat f
Clasws Gwen cat
Bowser Gwen dog
3 row(s) retrieved.
更新成功!
> !
1 row(s) deleted.
查看是否被删除:
[test@datacenter ~]$ isql -s test<<!
> select * from pet
> !
name owner species sex
Fluffy Harold cat f
Clasws Gwen cat m
BowserDiane dog m
现在用第三种发放“insert into表名字段values值”插入数据:
[test@datacenter ~]$ isql -s test<<!
INFORMIX用户权限

在数据库用户的管理中,我们可以根据用户对数据库数据的需要情况把用户分为几组,每一组用户可以作为一个"角色",每个用户就是角色的成员。通过使用角色,数据库系统更容易进行安全性管理,因为一旦某个用户属于某一个角色,对权限的授予和撤消只需针对角色便可。具体使用方法为:
1.创建角色:
如果要改INFORMIX的口令,可用INFORMIX登陆UNIX后用PWORD之如此类改INFORMIX的口令,如要为能使用INFORMIX数据库增加用户,可以用ROOT用户登陆增加一用户如LTD,并改在INFORMIX的用户组里.然后用INFORMIX用户连接数据库,执行GRANT函数分配LTD的权限.GRANT的用户可在网上查.我这里用的有:
缺省情况下,建立数据库的用户就是数据库管理员(DBA),除其本身和Informix用户外,其它用户不对该数据库拥有任何权限,因此也就不能进行任何形式的访问。数据库管理员可根据其他用户的业务分工、操作范围授予或撤消DBA、Resource、Connect三种不同的权限。
2.对于表及视图,其格式为:
二、权限的划分
Informix Dynamic Server使用了三级权限来保证数据的安全性,它们分别是数据库级权限、表级权限和字段级权限,具体为:
1.数据库级权限
包括Connect、Resource、DBA三种类别,其中:
ห้องสมุดไป่ตู้
Connect:最低级,仅允许用户访问数据库中的表和索引,但不能创建和删除它们;
Grant TAB-PRI on [ tab_name view_name ] to { PUBLIC User-List };
Revoke TAB-PRI on [ tab_name view_name ] from { PUBLIC User-List }
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在Informix Dynamic Server 中创建并使用函数索引随着数据量以惊人速度不断增长,数据库管理系统将继续关注性能问题。
本文主要介绍一种名为函数索引(functional index)的性能调优技术。
根据数据库使用情况的统计信息创建并使用函数索引,可以显著提升SELECT 查询的性能。
通过本文了解如何在IBM ® Informix ® Dynamic Server 中创建和使用函数索引并最大限度提升查询性能。
简介在选择数据库管理系统(DBMS)时,性能是一个关键的考虑因素。
在执行SELECT、INSERT、UPDA TE 和DELETE 操作时,很多因素都会对性能产生影响。
这些因素包括:持久性数据存储的速度和大小数据存储结构数据访问方法随着数据集不断变大,查询性能愈发变得重要。
通常,使用索引可以改善查询性能。
索引将数据库中的行位置与一组有序数据子集和/或数据派生物关联在一起。
索引可以减少DBMS 在执行查询时检查的行(或元组)数量,从而获得性能增益。
有时,仅通过搜索索引即可完成查询,而不需要从表中取回任何元组(tuple)。
例如,如果您在列c1 中建有索引,并且发出查询select c1 from t1 where c1 < 10 ,那么索引中包含了可以满足查询的所有信息。
有趣的是,ANSI SQL 标准并没有说明如何创建、实现或维护索引。
因此,数据库供应商可以按照自己的方式自由地实现索引。
本文讨论了Informix Dynamic Server 的函数索引特性。
要理解本文涉及的概念,您需要熟悉基本的数据库术语和概念,例如模式、表、行、列、索引和可扩展性。
还需了解Informix Dynamic Server (IDS) 的基本配置以及如何启动和停止服务器、如何使用ONCONFIG 文件进行配置。
此外,还需熟悉基本的SQL 命令以及如何使用dbaccess 对服务器执行SQL 命令。
本文的目的是帮助您理解函数索引的定义以及使用。
此外,您还将了解如何创建和使用函数索引,以及在创建函数索引之前需要考虑的一些问题。
函数索引的优势索引按照某种顺序保存列值。
函数索引对列中的数据进行转换并按照顺序保存转换后的值。
假设某个表中保存了一个企业的员工名称,并且需要保留名称的大小写形式。
那么,如果查询需要执行大小写不敏感的搜索(如下所示),则必须转换数据:SELECT * FROM t1 WHERE toUpper(name) LIKE 'ANTHONY % HOPKINS';如果没有为名称建立索引,那么DBMS 将执行全表扫描并对每个元组(tuple)的name 列应用toUpper 函数。
要确定元组(tuple)是否满足查询,必须调用toUpper 函数。
当表非常大或者大量会话发出这种类型的查询时,性能将会有所下降。
避免调用toUpper 函数的一种方法是在表中同时保存大小写混合的名称和大写名称。
应用程序查询大小写不敏感的列:SELECT * FROM t1 WHERE ucname like 'ANTHONY % HOPKINS';如果没有为ucname 创建索引,DBMS 仍然执行全表扫描,但是不会对数据进行进一步处理来判断其是否满足查询。
尽管这样做改善了性能,但并不是理想的解决方案,因为表非常大,而且所有需要操纵或访问数据的应用程序必须包括处理ucname 的逻辑。
改善查询性能的一种更好的方法是对name 创建函数索引:CREATE FUNCTION toUpper( name V ARCHER(100) ) RETURNS V ARCHAR(100)WITH (NOT V ARIANT);RETURN upper( name );END FUNCTION;CREATE INDEX ucnameIndex ON t1 ( toUpper(name) );当执行这种查询时,DBMS 可以使用函数索引判断哪些元组元组(tuple)满足查询。
DBMS 只获取并返回这些满足查询的元组(tuple),如下面的清单所示:SELECT * FROM t1 WHERE toUpper(name) LIKE 'ANTHONY % HOPKINS';DBMS 将自动管理函数索引以及不需要包含逻辑来管理大写形式数据的应用程序。
通过使用INSERT、UPDA TE 和DELETE 操作对索引进行更新,DBMS 能够确保索引始终与表数据一致。
接下来将深入讨论如何创建和使用函数索引,以及如何生成和检验查询计划,并提供具体的示例。
各种类型的函数索引函数索引是根据用户定义例程(User Defined Routine,UDR)返回的值创建的。
这里的UDR 一词通常用来指代返回值的函数。
UDR 必须是不可变的。
也就是说,对于给定的参数,UDR 始终返回相同的值,而且UDR 不能修改数据库或变量状态。
和随机数生成程序、当前日期/时间函数一样,UDR 通常是变化的,因此不能用于函数索引。
当定义UDR 并将之用于函数索引时,您必须显式将其指定为NOT V ARIANT。
可以将UDR 编写为一个存储过程语言(Stored Procedure Language,SPL)函数,或者使用外部语言(SQL、C/C++ 或Java)编写为一个外部函数。
函数索引可以根据用户定义的类型创建。
函数索引可以使用以下任意一种访问方法:B-树(默认)R-树用户定义的二级方法可针对单个列、单个列的派生值、多个列和多个列的派生值创建索引。
针对多个列创建的索引称为复合索引(composite index)。
例如,下面的查询针对一个列的列值和第二个列的派生值创建了一个复合索引:CREATE INDEX idx1 ON myTable( c1, f(c3) );函数索引的局限性函数索引不能是内置的代数、指数、对数或十六进制函数。
如果需要使用内置函数定义函数索引,那么必须从SQL 或外部语言函数中调用该函数。
不能针对返回大对象的UDR 创建函数索引。
不允许使用大对象作为索引键,因为一般情况下不能够对大对象进行比较和排序。
然而,需要注意,可以将大对象作为参数传递给UDR。
如果将某个UDR 用于函数索引,则该UDR 不能使用集合数据类型作为参数类型。
集合数据类型包括SET、MULTISET 和LIST。
对于用于函数索引的UDR,传递给它的参数在数量上有所限制。
根据所使用的Informix Data Server (IDS) 版本以及实现UDR 的具体语言的不同,这些限制也不尽相同。
例如,对于IDS 9.4,最多可以将102 列作为参数传递给 C UDR,并且最多可以将341 列作为参数传递给Java 或SPL UDR。
有关此方面的详细内容,请参考您的文档。
比较函数索引和非函数索引在创建和使用方面,函数索引和非函数索引之间存在着大量差异。
诸如UNIQUE 和CLUSTER 等索引选项,以及B-Tree、R-Tree 等访问方法和用户定义的访问方法,可以同时应用于函数索引和非函数索引。
同样,这两种类型的索引都可以指定一个FILLFACTOR,并可以指定存储选项来控制创建索引的位置以及是否对索引进行分段。
这两种索引都可以指定索引操作符类并按照降序或升序排列。
oncheck 实用工具可以对两种类型的索引进行验证和修复。
例如,下面的oncheck 命令将对db 数据库的tbl 表中名为i1 的索引进行验证:oncheck -ci db:tbl#i1。
如果oncheck 报告索引中存在一个问题,那么可以使用oncheck 的-y 选项进行修复。
该选项可以同时对函数索引和非功能性索进行修复。
从用户的角度来看,函数索引和非功能性索之间的一个差异就是它们执行CREA TE 和DROP 操作的方式不同。
在创建或删除一个函数索引时,不能指定ONLINE 关键字,如下所示:CREATE INDEX ... ONLINE; <== Not validDROP INDEX ... ONLINE; <== Not valid这说明,在创建或删除函数索引时,执行索引的表中始终持有一个排他锁。
在这段时间内,其他所有用户都无法访问这个表。
创建函数索引的注意事项任何索引都存在开销。
包括资源的使用和执行时间。
所有索引都需要进行保存,并且,所有索引都需要制定执行时间并保存其键值。
函数索引还会产生额外的函数执行开销。
在创建函数索引时,必须针对表中的每一行执行相关的函数。
并且,必须在INSERT 和UPDA TE 操作期间执行函数。
在创建函数索引之前,总是需要对数据库进行详细的成本收益分析。
分析的内容应该包括表中存储的数据量、执行数据查询的类型和频率。
如果表非常小,或者不经常执行使用函数索引的查询,那么创建函数索引可能收效甚微。
SQL EXPLAIN 文件查询计划被写入到SQL EXPLAIN 文件中。
下表展示了该文件的位置和名称。
平台IDS Server 位置SQL EXPLAIN 位置SQL EXPLAIN 名称UNIX 本地当前目录sqexplain.outUNIX 远程远程计算机的主目录sqexplain.outWindows 本地和远程<INFORMIXDIR>/sqexpln <username>.out现在,您已了解了函数索引的定义以及其使用方式和使用时机,接下来,将提供一些使用函数索引的例子。
我们将为您提供分步指导,使您能够亲自实现函数索引。
示例您已经了解了函数索引的定义以及其使用方式和使用时机。
下面的例子将展示一些具体应用。
每个例子都附带了分步指导,根据这些指导,您将能够亲自实现函数索引。
示例:对圆的面积执行函数索引本示例展示如何对圆的面积创建函数索引。
如果数据集较大,或者经常发出请求圆面积的查询,那么创建函数索引将有助于提高性能。
首先,创建一个表。
CREATE TABLE circles ( radius FLOAT );接着,创建一个SPL 函数,它将返回给定半径的圆的面积。
CREATE FUNCTION circleArea( radius FLOAT ) RETURNS floatWITH (NOT V ARIANT);RETURN 3.14159 * radius * radius;END FUNCTION;对这个圆形区域创建一个函数索引。
CREATE INDEX areaOfCircleIndex on circles( circleArea( radius ) );最后,执行查询,该查询将使用函数索引。
DBMS 使用索引判断哪些元组(tuple)满足查询,并且仅将这些元组(tuple)作为查询结果返回。