在Informix+Dynamic+Server+中创建并使用函数索引

合集下载

PDO配置及使用方法

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创建索引方法

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入门基础学习教程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数据库基本操作和常用配置

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使用命令建立和操作索引文件

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常用命令详解一(包括查询表结构信息,索引信息等)

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数据库(增、删、改、查)操作

Informix数据库(增、删、改、查)操作
isql -s test<<!
> 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用户权限

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.避免创建过多的索引,索引的数量过多会增加数据库的存储空间和维护成本,并且在写操作时会减慢数据库的速度。

三、索引的类型常见的数据库索引类型包括主键索引、唯一索引、聚簇索引、非聚簇索引和全文索引等。

以下分别介绍各种索引的特点和适用场景:1.主键索引主键索引是用来保证表中每一行的唯一性,并且可以提升对主键列的查询性能。

主键索引在创建表时通过指定主键列来创建,主要用于快速查找和对表进行连接操作。

2.唯一索引唯一索引用于保证指定列的唯一性,可以对表中的多个列建立唯一索引。

当对唯一索引列进行查找时,数据库引擎会自动使用索引进行匹配加速。

3.聚簇索引聚簇索引是按照索引的顺序来组织表记录的物理存储方式,即按照索引的列值进行排序。

聚簇索引在表中只能存在一个,并且通常是主键索引。

它可以提高特定列的查询性能,但会增加对数据的插入、删除和更新操作的成本。

4.非聚簇索引非聚簇索引将索引和表的数据分开存储,即索引和表是分离的。

非聚簇索引可以提高对非索引列的查询性能,但对于索引列的查询速度可能较慢。

5.全文索引全文索引是对文本内容进行索引,常用于搜索引擎等需要进行文本检索的场景。

VFP第三章表的创建和使用3.4-3.5 索引与常用函数

VFP第三章表的创建和使用3.4-3.5 索引与常用函数

1. 索引(Index)索引是根据索引关键字(即索引表达式)的值进行逻辑排序的一组指针。

索引提供对数据的快速访问,可以对表的各行强制实现唯一性。

索引文件由索引序号和对应于索引序号的表的记录号(亦称为指针)组成。

2. 索引关键字(Index Key)索引关键字是用来作为建立索引的依据。

它通常是一个字段或字段表达式。

例如,学生表(XS.DBF)中有8个记录,输入时的物理顺序如下:记录号XH XM XB ZYDH XIMING1 950101 李林男102001 信息管理系2 950106 高山男102001 信息管理系3 950105 陆海涛男102001 信息管理系4 950104 柳宝女102001 信息管理系5 950102 李枫女102001 信息管理系6 950103 蓝军男102001 信息管理系7 960201 林一风男109003 计算机科学系8 960203 高平男109003 计算机科学系现以XH字段作为索引关键字,按升序建立索引,索引文件的情况如下:P83Index # Table Record # XH1 1 9501012 5 9501023 6 9501034 4 9501045 3 9501056 2 9501067 7 9602018 8 960203第一列是索引号,第二列是对应于表中的记录号。

当该索引起作用时,浏览学生表时,记录按学号的顺序排列。

索引表达式的构成2-1索引表达式的构成与一般表达式的构成一样,只是索引表达式一般与表的字段有关。

索引表达式可以由单个字段构成,也可以是多个字段的组合。

需要注意的是,不能基于备注型字段和通用型字段建立索引。

索引表达式的构成2-2对于基于多个字段的索引表达式,可以按多个字段的值进行排序。

用多个字段建立索引表达式时,要注意以下几点。

⒈字符型表达式⒉算术表达式⒊不同类型字段构成一个表达式⒈字符型表达式⒈表达式中字段的前后顺序将影响索引的结果。

Informix创建数据库和用户

Informix创建数据库和用户

1.前提rmix安装。

rmix AdminTools安装。

3.clientsdk.2.90.TC1安装。

2.创建数据库a)打开数据库实例(命令行),“开始->程序->Informix Dynamic Server 9.40->XXX-name(实例名)”。

如下图:图 1 Informix 实例b)执行如下语句,创建数据库数据文件。

copy nul D:\ifmxdata\ol_limaoDB\testdbs_dat.000c)执行如下语句,创建数据库表空间。

onspaces -c -d testdbs -p d:\ifmxdata\ol_limaoDB\testdbs_dat.000 -o 0 -s 10000 执行后:图 2 创建数据库空间d)创建数据库。

启动dbaccess工具:图3启动dbaccess工具回车后,用键盘“上下左右键”,选择Database:图4选择Database 回车后,选择Create:图5选择Create回车后,输入数据库名:图6输入数据库名test回车后,选择创建数据库的类型Dbspace:图7选择Dbspace回车后,选择数据库所在的Dbspace,即我们刚创建的testdbs:图8选择test数据库所在的Dbspace 回车后,选择Exit。

再回车,选择Create-new-database:图9选择Create-new-database回车后,创建完成。

查看是否成功,选择Info:图10选择Database Info 回车后,选择Databases:图11选择Databases 查看我们刚创建的test数据库是否存在:图12查看test数据库3.创建用户。

a)由于Informix的用户管理机制是与操作系统用户管理绑定的,故新建Informix用户需要创建操作系统用户,然后将创建的用户增加到Informix-Admin用户组中。

b)创建计算机用户。

Informix数据库基本操作和常用配置

Informix数据库基本操作和常用配置
Informix数据库基本操作和常用配置
Windows
创建动态服务
开始-> Informix Dynamic Server11.50-> server instances manager选择create new创建一个动态服务,需要记住的信息有端口号、服务名和密码,其他信息用默认的即可。端口号从8098开始,可以自己设置,再次创建新的服务时会自动增加,服务名最好自己设置,默认的服务名很长,不方便记,这里我以test为例。如果系统中装了informix数据库,登陆系统时会默认以informix用户登陆,最好所有对数据库的操作均在informix用户下进行,不赞成在windows用户下操作,会导致权限不一致,连接不上数据库。完成后会弹出一个是否初始化动态服务的选项,选择是,初始化完成后动态服务就创建完成了,以下简称IDS。此时会在informix安装目录的etc目录下生成一个ONCONFIG.test(test为服务名)配置文件。
为了减少死锁或者锁等待现象,informix11.5还提供一些新特性来提高应用系统并发执行效率,这里只介绍下我们用到的。通过设置USRLASTCOMMITTED参数来减少锁等待和死锁现象,通常该参数设置为ALL即可,USELASTCOMMITTED选项可具有以下四个值中的任意一个:
1.如果值为“COMMITTED READ”,那么当数据库服务器尝试读取处于“已落实读”或“读已落实”隔离级别的行而遇到互斥锁时,它将读取最近落实的数据版本。
扩展表空间
创建好动态服务后我们可以通过开始-> Informix Dynamic Server11.50->test打开控制台。在windows下装完informix数据库后还会生成一个IFMXDATA文件夹,与安装目录相同,每创建一个IDS就会在该文件中生成一个以服务名命名的文件夹,当选择初始化动态服务的时候就会在对应的文件夹中生成两个空间文件,一个rootdbs_dat.000是一个informix内部使用的默认空间,rootdbs我们一般都不用。另一个test_dat.000则是我们主要使用的,以后建的数据库都是放在这个表空间里的。Test_dat.000默认大小为100M,一般都需要扩展一个表空间上去,扩展表空间的方法:先去\IFMXDATA\test目录下新建一个文件test_dat.001,然后在控制台输入命令:onspaces -atest-p c:\IFMXDATA\test\test_dat.001 -s 300000 -o 0,-a是添加,-p是路径,-s是大小,-o是偏移量,0为偏移量的大小,偏移量类似一个开始的地址,为0,就是从1开始,为10,则从11开始。若在一个文件上建一个100大小的chunk(chunk,区,块informix术语单位,不多解释),偏移量设为0,则这个chunk就占据了1-100这段空间,若在这个文件上再建一个100大小的chunk,1-100已经被占用,则偏移量要设为100,即从101开始。注意,对于同一文件是要往后累加的,不同的文件则都可以从0开始,不过建议如果分配的空间太大,最好能预留一点给磁盘信息。完成后可以用onstat–d查看表空间信息。如果不选择初始化,这两个文件的大小都为0,需要手动修改,用这个命令即可,其中-c是创建:onspaces -c -dtest-p C:\IFMXDATA\test\test_dat.000 -o 0 -s 300000,rootdbs不常用,可以不用修改。

sqlite数据库索引使用方法

sqlite数据库索引使用方法

sqlite数据库索引使用方法SQLite是一种轻量级的嵌入式数据库管理系统,被广泛应用于移动设备和嵌入式系统中。

在处理大量数据时,为了提高查询效率,我们可以使用索引来加速数据库的查询操作。

本文将介绍SQLite数据库索引的使用方法。

一、索引的概念和作用索引是一种数据结构,用于加速数据库中的数据查找。

它类似于书籍的目录,可以根据关键字快速定位到书籍的具体内容。

在SQLite 中,索引可以大大提高查询的效率,减少查询所需的时间。

二、索引的创建在SQLite中,我们可以使用CREATE INDEX语句来创建索引。

创建索引时,需要指定要创建索引的表名、索引名以及要创建索引的列名。

例如,以下语句将在表中创建一个名为"index_name"的索引,该索引基于"column_name"列:CREATE INDEX index_name ON table_name (column_name);三、索引的类型SQLite支持多种类型的索引,包括B树索引、Hash索引和全文索引等。

其中,B树索引是SQLite默认的索引类型,也是最常用的索引类型。

它可以实现快速的范围查询和排序操作。

Hash索引适用于等值查询,但不支持范围查询。

全文索引可以用于文本搜索,但在SQLite中需要额外的配置和扩展。

四、索引的选择在选择创建索引时,需要考虑查询的频率和效率。

一般来说,对于经常被查询的列,应该创建索引以提高查询效率。

但是,过多的索引也会增加数据库的存储空间和维护成本,因此需要权衡利弊。

五、索引的优化为了使索引的使用更加高效,我们可以采取一些优化策略。

首先,可以使用复合索引来覆盖多个列,以减少索引的数量。

其次,可以使用合适的数据类型和字段长度,以减小索引的大小。

此外,还可以定期重新构建和优化索引,以保持索引的性能。

六、索引的注意事项在使用索引时,需要注意以下几点。

首先,索引只能加快查询操作,而对于插入、更新和删除操作,索引可能会导致性能下降。

INFORMIX数据库操作及SQL语法

INFORMIX数据库操作及SQL语法

编号:TN-070101001TIENON数据库培训教程INFORMIX基本操作及SQL语法2007年1月,V 1.00目录1、引言 (4)1.1、读者对象 (4)1.2、内容简介 (4)1.3、课程时间 (4)1.4、课程目标 (4)2、数据库基本概念...................................................... 错误!未定义书签。

2.1、从身边的例子了解数据库......................................................... 错误!未定义书签。

2.2、数据库系统概述......................................................................... 错误!未定义书签。

2.2.1、数据库的产生.................................................. 错误!未定义书签。

2.2.2、数据库系统组成................................................ 错误!未定义书签。

2.2.3、与数据库相关的软件系统........................................ 错误!未定义书签。

2.2.4、数据库系统特点................................................ 错误!未定义书签。

2.2.5、数据库系统的历史.............................................. 错误!未定义书签。

2.2.6、数据库系统的发展趋势.......................................... 错误!未定义书签。

2.2.7、数据库的分类.................................................. 错误!未定义书签。

IDS index(china)

IDS index(china)

RDBMS Fundamentals: 索引Relational data structures: Indexes (examples on Informix Dynamic Server –IDS)降序) 的Index 扫描时可以的. Examples Select fname, lname from customer order by customer_num;Select customer_num from customer order by customer_num desc;区间索引页能够从这种结构中获得性能提升. 例如:Select customer_num, fname, lname from customer where分配给的DBs, tables,我们可以把不同的数据库对象存储在不同的磁盘上–目的在于可以在磁盘驱动器和控制器之间均衡分散例如:–database stores_demo存储在dbspace•如果不指明dbspace, 默认为Root dbspace –table customer存储在dbspace dbs2•如果不指明dbspace, 表将创建在root dbspace –index ix_cust存储在dbspace dbs3•如果不指明dbspace,index将创建在表所在的•当对一个空表创建索引时,仅仅创建B-tree复合索引的好处在informix中,优化器在以下情况下可以使用复合索引:我们以如下方式使用基于列a, b, c 创建的索引:–CREATE INDEX ix_sample ON sample_table (a, b, c);–使用部分关键词定位特定的行:WHERE a=1WHERE a>=12 AND a<15WHERE a=1 AND b < 5WHERE a=1 AND b = 17 AND c >= 40–以下的过滤条件不能借助复合索引:WHERE b=10WHERE c=221WHERE a>=12 AND b=15–使用key-only搜索替换全表搜索•当查询的所有列都在索引中时–当使用列a, ab或者abc与其它表做连接时–需要基于列a, ab或者abc做ORDER BY或者GROUP BY操作时•如果是b, c, ac, or bc则不能获益Expression-based: tables 和indexes都支持col1 > 100 AND col1 < 500 IN dbspace2。

创建索引的方法

创建索引的方法

创建索引的方法索引是数据库中的一种数据结构,用于提高数据查询的效率。

在数据库中创建索引可以加快查询速度,降低系统负载,提高数据库的性能。

本文将介绍几种创建索引的方法,帮助读者更好地理解和应用索引。

1. 单列索引单列索引是最常见的索引类型,它仅对表中的单个列进行索引。

创建单列索引的方法是使用CREATE INDEX语句,指定要创建索引的表和列名即可。

例如,在一个员工表中,如果经常需要根据员工的工号进行查询,可以创建一个单列索引来加速查询。

2. 多列索引多列索引是对表中多个列进行索引,也被称为复合索引。

创建多列索引的方法与单列索引类似,只需要在CREATE INDEX语句中指定多个列名即可。

多列索引适用于需要根据多个列进行查询的场景,可以提高查询效率。

3. 唯一索引唯一索引是一种约束索引,用于确保表中的某个列的值唯一。

创建唯一索引的方法是在CREATE INDEX语句中添加UNIQUE关键字,表示该索引中的值不能重复。

例如,在一个学生表中,学生的学号是唯一的,可以创建一个唯一索引来保证学号的唯一性。

4. 全文索引全文索引是一种特殊的索引类型,用于对文本数据进行搜索。

创建全文索引的方法是使用CREATE FULLTEXT INDEX语句,指定要创建索引的表和列名。

全文索引可以提供更精确的搜索结果,适用于对文本进行模糊查询的场景。

5. 聚集索引聚集索引是一种特殊的索引类型,它决定了表中数据的物理排序方式。

创建聚集索引的方法是在CREATE TABLE语句中使用PRIMARY KEY关键字,指定要创建索引的列名。

聚集索引可以提高查询的效率,但每个表只能有一个聚集索引。

6. 非聚集索引非聚集索引是一种与聚集索引相对应的索引类型,它并不决定表中数据的物理排序方式。

创建非聚集索引的方法是使用CREATE INDEX 语句,指定要创建索引的列名。

非聚集索引适用于需要频繁进行查询和更新的表。

7. 稠密索引稠密索引是一种对所有记录进行索引的索引类型,即使某些记录的索引列为空值。

informix的使用技巧

informix的使用技巧

安装数据库管理实用程序IDS联网内核配置参数备份策略从sysmaster或者sysutils实例中监控备份小技巧影响CPU使用率的配置参数常用指令用法说明数据复制技术如何监控IDSIDS数据库维护技巧informix的用户权限管理基本概念安装数据库:1.配置informix安装空间:1G左右,用来存放数据库的安装文件,一般是/Informix2.创建informix用户和用户组3.对informix软件进行解包,有以下几种方法:cpio –icvdumB < /mnt/cdrom/*.cpirpm –iv –prefix $INFORMIXDIR /mnt/cdrom/*.rpmtar –xvfb 20 /mnt/cdrom/*.tar4.配置informix安装环境变量:INFORMIXDIR=/informixPATH=$INFORMIXDIR/bin:$PATHINFORMIXSERVER=szxaONCONFIG=onconfig.SZXATERMCAP=$INFORMIXDIR/etc/termcapTERM=vt1005.安装informix软件(用informix用户)/Informix/installserver安装完成后,会提示用root用户运行/Informix/RUN_AS_ROOT.server至今,informix软件安装完毕6.阅读版本说明:/$INFORMIXDIR/release/en_us/03337.配置/etc/services文件:Service_name port/protocol alias例如:sqlexecA 1526/tcp # SZXA informix database usesqlexecB 1527/tcp # SZXB informix database use8.配置sqlhosts文件:dbservername nettype hostname service_name例如:szxa onsoctcp S1_C_SZX_SHUJUKU 1526dbserver_name 网络接口协议主机服务别名注意,系统使用的网络接口类型,可以从版本说明文件获得9.生成磁盘存储:一般使用裸设备,并生成磁盘设备的链接,这样,如果磁盘设备失败,也可以把链接改变成指向可操作的磁盘ln -s /dev/rrootdbs /Informix/data/rootdbs10.配置onconfig文件:(第一次初始化只是针对于rootdbs,参数配置可以相对简单)ROOTOFFSET –指定KB数,确定在原始设备中移动多长距离之后再生成根dbspace PHYSFILE –第一次初始化,设置临时值2048,LOGFILES –第一次初始化,设置临时值3LOGSIZE –第一次初始化,设置临时值500TAPEDEV(存档),LTAPEDEV(日志存档)-- /dev/null,这样就可以运行档案程序ontape而不实际把数据写入磁带中SERVERNUM –运行多个服务器时确定服务器的共享内存地址,唯一值DBSERVERNAME –应该与sqlhosts文件中的项目相符DBSPACE TEMP –可以有多个dbspace组成,这样,每个排序操作就会平均分配在每个tempdbspace中进行DEADLOCK_TIMEOUT –等待多长时间确认某操作遭遇死锁NETTYPE –可选参数,配置如下协议类型轮询线程数每个轮询希望的并发连结数处理器类例如:soctcp,2,150,NETRESIDENT –驻留系统物理内存与否NUMCPUVPS –指定对实例启动的CPU类虚拟处理器个数,按照处理器的个数而定可以用onstat –g glo进行调整SINGLE_CPU_VP –指定服务器不运行多个CPU虚拟处理器,设置为true(1)使服务器跳过管理锁存资源的大部分代码,从而提高性能LOCKS –服务器对服务器线程分配的最大锁数,用onstat –p监控状态,如果ovlocks一直大于0,需要增加实例所用的锁数BUFFERS –定义实例分配的缓冲区数,检查onstat –p输出的缓冲读和缓冲写,调整该参数使这些值最大化CLEANERS –指定所需的页面清理线程数,用于把数据从共享内存写入磁盘。

informix创建表和数据库的语句(转)

informix创建表和数据库的语句(转)

informix创建表和数据库的语句(转)⼀、简介:1)、INFORMIX主要产品分为三⼤部分:数据库服务器(数据库核⼼)应⽤开发⼯具⽹络数据库互联产品2)、数据库服务器有两种,作⽤都是提供数据操作和管理:SE:完全基于UNIX操作系统,主要针对⾮多媒体的较少⽤户数的应⽤ONLINE:针对⼤量⽤户的联机事务处理和多媒体应⽤环境3)、应⽤开发⼯具是⽤以开发应⽤程序必要的环境和⼯具,主要也有两个系列:4GL:INFORMIX传统的基于字符界⾯的开发⼯具,该系列的主要产品有五个,他们是I-SQL、4GL RDS、4GL C COMPILER、4GL ID和ESQL/C; NewEra:INFORMIX最新提供的具有事件驱动能⼒、⾯向对象的基于各种图形界⾯的开发⼯具。

4)、INFORMIX的⽹络数据库互联产品:提供给⽤户基于多种⼯业标准的应⽤程序接⼝,通过它可以和其它遵守这些⼯业标准的数据库联接。

⼆、I-SQL菜单简介:Form 可以执⾏、创建、修改、编译屏幕格式或删除已存在的屏幕格式Run 执⾏某⼀已经存在的屏幕格式Modify 修改指定的已经存在的屏幕格式Generate 为指定的表创建⼀个缺省的屏幕格式Compile 编译⼀个制定的屏幕格式New 创建特定的⽤户屏幕格式Drop 删除某已经存在的格式⽂件Exit 退出Form菜单Report 可以执⾏、建⽴、修改、编译、或删除报表Run 执⾏某⼀报表Modify 修改指定的报表Generate 为某⼀个表建⽴⼀个缺省的报表New 建⽴⼀个⽤户指定的报表Compile 编译指定的报表Drop 删除⼀个指定的已经存在的报表Exit 退出Report菜单Query-Language 详见实⽤程序说明:dbaccessUser-menu 可以执⾏、建⽴或修改⽤户建⽴的菜单Run 执⾏当前数据库的⽤户菜单Modify 允许⽤户建⽴或修改⽤户菜单Exit 退出User-menu菜单Database 详见实⽤程序说明:dbaccessTable 详见实⽤程序说明:dbaccessExit 退出实⽤程序isqlrf(或isql)三、常⽤操作:创建数据库ISQL==》DATABASE==》CREATE==》输⼊新建数据库名称创建表ISQL==》TABLE==》CREATE==》输⼊欲建的表名==》ADD==》输⼊欲建的字段名及类型等==》EXIT==》BUILD-NEW-TABLE⽣成缺省表格式ISQL==》FORM==》GENERATE=》选择数据库==》输⼊表格式名称==》选择表==》TABLE-SELECTION-COMPLETE-----》编译成功==》RUN四、使⽤RDSQL(交互式查询语⾔)编写SQL语句⽅法:ISQL==》Query Langavage==》NEW==》RUN建⽴数据库CREATE DATABASE 数据库名建表(格式及可选数据类型)基本格式:CREATE TABLE表名( 字段名 类型 ,字段名 类型 ,--- 字段名 类型);详细定义:CREATE TABLE表名( COL1 INTEGER NOT NULL,COL2 CHAR(2) CHECK ( COL2 IN (“??”,“??” )),COL3 DATE DEFAULT TODAY,COL4 SMALLINT UNIQUE,--- 字段名 类型 )FRAGMENT BY ROUND ROBIN (BY EXPRESSION) IN DB1,DB2EXTENT SIZE 1000 NEXT SIZE 600WITH NO LOG (LOG;BUFFERED LOG;LOG MODE ANSI )LOCK MODE ROW(PAGE);例1:CREATE TABLE ORDERS(ORDER_NUM INTEGERUNIQUE CONSTRAINT ORDER_NUM_UQ,ORDER_DATE DATENOT NULL CONSTRAINT ORDER_DATE_NNDEFAULT TODAY );例2:CREATE TABLE CUSTOMER (CUSTOMER_NUM SERIAL,FNAME CHAR(20),PRIMARY KEY (CUSTOMER_NUM)CONSTRAINT PK_CNUM);CREATE TABLE ORDERS (ORDER_NUM SERIAL,CUSTOMER_NUM INTEGER,FOREIGN KEY (CUSTOMER_NUM)REFERENCES CUSTOMERCONSTRAINT FK_CNUM);数据类型:字符型(CHAR(20)), VARCHAR(MINSIZE, MAXSIZE)数值型(六种,DECIMAL(16,2),SMALLINT,INTEGER,SMALLFLOAT,FLOAT,SERIAL ) ⽇期型( DATE,默认格式为:MM/DD/YYYY )**要修改DATE类型的缺省格式, 只要在⽤户主⽬录的.profile⽂件中做如下说明: DBDATE=Y4MD/ EXPORT DBDATE **货币型(MONEY (8,2))其它(如:INTERVAL,DATETIME 等)建⽴索引(必须建⽴命名索引)CREATE [ UNIQUE ] INDEX 索引名 ON 表名(字段名)CREATE [ UNIQUE ] INDEX 索引名 ON 表名(字段名) DISABLED;SET INDEXES 索引名 ENABLEDDROP INDEX 索引名数据库权限CONNECT:访问数据库RESOURCE:允许⽤户建⽴或清除数据库中的表和索引DBA:数据库管理员,所有权限,⼀般建表者即为DBAGRANT 权限 TO 〈PUBLIC | ⽤户名〉REVOKE 权限 FROM 〈PUBLIC | ⽤户名〉检索数据库DATABASE 数据库名SELECT * FROM 表名SELECT 字段名,字段名 FROM 表名SELECT 字段名,字段名+-*/ 新字段名 FROM 表名SEKECT AVG(字段) ,MIN(),MAX(),SUM(),COUNT() FROM 表名WHERE ⼦句 = 〈〉!= < <= > >= MATCHES * 0—多个 ? 单个 [ ] 单个字符或⼀个范围 / 转义下⼀个字符LIKE %:0--多个 _ 单个 / 转义下⼀个特殊字符ORDER BY (DESC)时间函数: DAY MDY MONTH WEEKDAY YEAR DATE CURRENT 其它函数: LENGTH USER CURRENT TODAY从多个表中查找, SELECT 嵌套 字段名不同可直接写出,若不同表中有相同字段名,则前缀表名SELECT 表⼀.字段名 FROM 表⼀, 表⼆向表中插⼊数据INSERT INTO表名 [ 列1, 列2。

informix数据库常用操作

informix数据库常用操作

informix数据库常用操作根据个人工作经验的以及网上找的资料整理汇总,感谢网上网友提供的资料。

查看数据库实例名:dbaccess,然后选择database,在选择select,数据库名@符号后面的即为数据库实例名新建数据库:1、使用dbaccess进入informix交互环境2、选择Database,回车3、选择 Create,回车4、输入数据库名:uniacctr,回车5、选择 Dbspace(表空间),回车6、选择跟局数据数据库bureaudb一样的表空间,回车7、选择 Log ,回车8、选择 Log,回车(选择日志模式,其他不支持事务)9、选择 Exit,回车10、选择 Create-new-database ,回车。

此时数据库应该已经建立。

查看某个数据库的表空间:1、使用dbaccess进入informix交互环境2、选择Database,回车3、选择 Select,回车4、选择局数据数据库bureaudb,回车5、选择Info,回车6、选择dBSpace,回车图中rootdbs位置显示的即是表空间关键字: dbschema工具:1)导出数据库中所有的表结构到文件db.sql$>dbschema -d your_database -t all db.sql2)导出数据库中所有的存储过程到文件db.sql$>dbschema -d your_database -f all db.sql3)导出数据库中的所有对象(包含表,存储过程,触发器。

)到文件db.sql $>dbschema -d your_database db.sql4)导出数据库中一个表的结构到文件db.sql$>dbschema -d your_database_name -t your_table_name db.sql5)导出一个存储过程定义到文件db.sql$>dbschema -d your_database_name -f your_procedure_name db.sql6)如果导出更多的表的信息(EXTENT...)$>dbschema -d your_database_name -ss db.sql7)导出数据库中对用户或角色的授权信息$>dbschema -d your_database_name -p all$>dbschema -d your_database_name -r all8)导出数据库中的同义词$>dbschema -d your_database_name -s all导出数据库表结构:dbschema -d database > database.sqldbschema -t tablename >tablename.sql-d表示导出整个数据库的表结构,-t表示导出某一个数据表的表结构。

添加索引的方法

添加索引的方法

添加索引的方法
索引是一种用于加速数据库查询的数据结构。

如果你的数据库中有很多数据,那么添加索引可以大大提高查询效率。

以下是一些添加索引的方法:
1. 选择恰当的列
在添加索引之前,你需要选择哪些列需要进行索引。

通常情况下,你需要选择那些经常用于查询和排序的列。

2. 了解不同类型的索引
常见的索引类型包括B树索引、哈希索引和全文索引。

每种类型都有其优缺点,你需要根据具体情况选择合适的索引类型。

3. 选择合适的索引算法
不同的数据库会使用不同的索引算法。

你需要选择合适的算法来优化查询效率。

4. 避免过度索引
在添加索引时,你需要避免过度索引。

过度索引会导致查询效率下降,同时也会增加数据库的存储空间。

5. 定期更新索引
添加索引后,你需要定期更新索引以保持其最新状态。

这可以通过定期重新构建索引来实现。

总之,添加索引是提高数据库查询效率的有效方法。

你需要选择适当的列、索引类型和算法,并避免过度索引,以保持数据库的最佳性能。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)作为查询结果返回。

相关文档
最新文档