当前位置:文档之家› 在Informix+Dynamic+Server+中创建并使用函数索引

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

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

在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 valid

DROP INDEX ... ONLINE; <== Not valid

这说明,在创建或删除函数索引时,执行索引的表中始终持有一个排他锁。在这段时间内,其他所有用户都无法访问这个表。

创建函数索引的注意事项

任何索引都存在开销。包括资源的使用和执行时间。所有索引都需要进行保存,并且,所有索引都需要制定执行时间并保存其键值。函数索引还会产生额外的函数执行开销。在创建函数索引时,必须针对表中的每一行执行相关的函数。并且,必须在INSERT 和UPDA TE 操作期间执行函数。

在创建函数索引之前,总是需要对数据库进行详细的成本收益分析。分析的内容应该包括表中存储的数据量、执行数据查询的类型和频率。如果表非常小,或者不经常执行使用函数索引的查询,那么创建函数索引可能收效甚微。

SQL EXPLAIN 文件

查询计划被写入到SQL EXPLAIN 文件中。下表展示了该文件的位置和名称。

平台IDS Server 位置SQL EXPLAIN 位置SQL EXPLAIN 名称

UNIX 本地当前目录sqexplain.out

UNIX 远程远程计算机的主目录sqexplain.out

Windows 本地和远程/sqexpln .out

现在,您已了解了函数索引的定义以及其使用方式和使用时机,接下来,将提供一些使用函数索引的例子。我们将为您提供分步指导,使您能够亲自实现函数索引。

示例

您已经了解了函数索引的定义以及其使用方式和使用时机。下面的例子将展示一些具体应用。每个例子都附带了分步指导,根据这些指导,您将能够亲自实现函数索引。

示例:对圆的面积执行函数索引

本示例展示如何对圆的面积创建函数索引。如果数据集较大,或者经常发出请求圆面积的查询,那么创建

函数索引将有助于提高性能。

首先,创建一个表。

CREATE TABLE circles ( radius FLOAT );

接着,创建一个SPL 函数,它将返回给定半径的圆的面积。

CREATE FUNCTION circleArea( radius FLOAT ) RETURNS float

WITH (NOT V ARIANT);

RETURN 3.14159 * radius * radius;

END FUNCTION;

对这个圆形区域创建一个函数索引。

CREATE INDEX areaOfCircleIndex on circles( circleArea( radius ) );

最后,执行查询,该查询将使用函数索引。DBMS 使用索引判断哪些元组(tuple)满足查询,并且仅将这些元组(tuple)作为查询结果返回。

SELECT radius FROM circle WHERE circleArea( radius ) < 500;

示例:对图像的平均RGB 值执行函数索引

在这个例子中,我们将针对一副数字图像的像素平均色值创建函数索引。UDR 使用 C 编写,可以处理简单的彩色TIFF 图像。提供了以下函数:

avgRGB:图像中所有像素的平均值

avgRed:图像中所有红色像素的平均值

avgGreen:图像中所有绿色像素的平均值

avgBlue:图像中所有蓝色像素的平均值

这个例子演示了如何使用函数索引选择具有某些特征的图像。在创建函数索引时,将执行与其相关的UDR 来对图像进行预处理,并将结果作为索引键保存。SELECT 查询在查询过滤器中指定图像处理函数,现在,这些查询的运行速度得到了提高,因为它们使用索引判断每个元组(tuple)是否满足查询。

设置

我们针对运行在64 位Linux x86 上的IDS version 11.10 对该示例进行了测试。可针对不同平台修改相应的指令。要想了解您的平台适合哪些编译器和连接器,请参考$INFORMIXDIR/incl/dbdk 中的makeinc.* 文件。

本示例的源代码以及相关文件可下载获得。可通过下载一节下载代码。

设置以下环境变量:

INFORMIXDIR the location of your IDS installation

LD_LIBRARY_PA TH add $INFORMIXDIR/lib

add $INFORMIXDIR/lib/esql

为智能二进制大对象(smart blob)创建sbspace。注意:sbspace 名称必须与ONCONFIG 文件中SBSPACENAME 值匹配。在本例中,名为sbsp2。

在与根dbspace 相同的目录中,创建一个名为sbsp2 的空文件(ONCONFIG 文件中ROOTPA TH 的值指定根dbspace 的名称和位置)。

将文件所有权改为informix:informix。

将文件权限改为mode 660。

以用户informix 的身份,创建sbspace:

onspaces -c -S sbsp2 -p /sbsp2 -o 0 -s 50000

创建一个数据库,并将图像作为智能二进制大对象保存。loadImages.sql 脚本创建一个名为imagedb 的数据库并加载一些图像。

cd

dbaccess - loadImages.sql

编译 C UDR 并创建一个共享库。

cc -c -fPIC -I$INFORMIXDIR/incl/public imageUDR.c

ld -shared -melf_x86_64 -Bsymbolic -o imageUDR.so imageUDR.o

注册 C UDR。

根据您的IDS 服务器的配置方式,您可能需要使用EXTEND 角色创建 C UDR。如果您的服务器配置中的IFX_EXTEND_ROLE 设置为OFF,那么即使不具备EXTEND 角色也可以创建 C UDR。如果服务器

配置中的IFX_EXTEND_ROLE 设置为ON,则需要使用EXTEND 角色才能创建UDR。

您的数据库管理员可以使用下面的SQL 命令向您授予EXTEND 角色:GRANT EXTEND TO ''。

您可以使用下面的命令检查服务器配置:onstat -c。

将包含 C UDR 的共享库复制到INFORMIXDIR:

Copy imageUDR.so to $INFORMIXDIR/extend

Change the file permissions to mode 755

将 C UDR 注册到Informix。注意,我们指定了HANDLESNULLS,因此,当列值为NULL 时,IDS 将允许函数返回一个值。

dbaccess imagedb -

CREATE FUNCTION avgRGB( blob ) RETURNS INTEGER

WITH ( NOT V ARIANT, HANDLESNULLS )

EXTERNAL NAME '$INFORMIXDIR/extend/imageUDR.so( avgRGB )'

LANGUAGE C;

CREATE FUNCTION avgRed( blob ) RETURNS INTEGER

WITH ( NOT V ARIANT, HANDLESNULLS )

EXTERNAL NAME '$INFORMIXDIR /extend/imageUDR.so( avgRed )'

LANGUAGE C;

CREATE FUNCTION avgGreen( blob ) RETURNS INTEGER

WITH ( NOT V ARIANT, HANDLESNULLS )

EXTERNAL NAME '$INFORMIXDIR /extend/imageUDR.so( avgGreen )'

LANGUAGE C;

CREATE FUNCTION avgBlue( blob ) RETURNS INTEGER

WITH ( NOT V ARIANT, HANDLESNULLS )

EXTERNAL NAME '$INFORMIXDIR /extend/imageUDR.so( avgBlue )'

LANGUAGE C;

验证是否已加载数据以及是否能够访问 C UDR:

dbaccess imagedb -

Database selected.

> select name,

> avgRed(image) as avgRed,

> avgGreen(image) as avgGreen,

> avgBlue(image) as avgBlue,

> avgRGB(image) as avgRGB

> from images;

...

name yellowbluestainedglass

avgred 190

avggreen 190

avgblue 66

avgrgb 148

18 row(s) retrieved.

>

查询

发出使用UDR 的查询。此时,不存在任何索引。set explain on 指示IDS 生成显示查询计划的文件。dbaccess imagedb -

> set explain on;

> select name,

> avgRed(image) as avgRed,

> avgGreen(image) as avgGreen,

> avgBlue(image) as avgBlue,

> avgRGB(image) as avgRGB

> from images

> where avgRGB(image) > 150 and avgBlue(image) > 160;

name white

avgred 255

avggreen 255

avgblue 255

avgrgb 255

name redblue

avgred 255

avggreen 0

avgblue 255

avgrgb 170

name graygreentexture

avgred 173

avggreen 173

avgblue 171

avgrgb 172

3 row(s) retrieved.

>

检查SQL EXPLAIN 输出。该查询计划显示了一个全表扫描。

QUERY:

------

select name, avgRed(image) as avgRed, avgGreen(image) as avgGreen, avgBlue(image) as avgBlue, avgRGB(image) as avgRGB

from images where avgRGB(image) > 150 and avgBlue(image) > 160

Estimated Cost: 2

Estimated # of Rows Returned: 1

1) .images: SEQUENTIAL SCAN <== Full Table Scan

Filters: (.avgblue(.images.image )> 160

AND .avgrgb(.images.image )> 150 )

UDRs in query:

--------------

UDR id : 350

UDR name: avgblue

UDR id : 347

UDR name: avgrgb

UDR id : 347

UDR name: avgrgb

UDR id : 350

UDR name: avgblue

UDR id : 349

UDR name: avggreen

UDR id : 348

UDR name: avgred

对 C UDR 提供的函数创建函数索引并再次发出查询:

dbaccess imagedb -

> create index avgRGBIndex on images( avgRGB( image ) );

> create index avgRedIndex on images( avgRed( image ) );

> create index avgGreenIndex on images( avgGreen( image ) );

> create index avgBlueIndex on images( avgBlue( image ) );

> set explain on;

> select name,

> avgRed(image) as avgRed,

> avgGreen(image) as avgGreen,

> avgBlue(image) as avgBlue,

> avgRGB(image) as avgRGB

> from images

> where avgRGB(image) > 150 and avgBlue(image) > 160;

检查SQL EXPLAIN 输出。该查询计划展示了函数索引的使用。

QUERY:

------

select name,

avgRed(image) as avgRed,

avgGreen(image) as avgGreen,

avgBlue(image) as avgBlue,

avgRGB(image) as avgRGB

from images

where avgRGB(image) > 150 and avgBlue(image) > 160

Estimated Cost: 1

Estimated # of Rows Returned: 2

1) .images: INDEX PA TH <== Index Scan

Filters: .avgblue(.images.image )> 160

(1) Index Keys: .avgrgb(image) (Serial, fragments: ALL)

Lower Index Filter: .avgrgb(.images.image )> 150

UDRs in query:

--------------

UDR id : 350

UDR name: avgblue

UDR id : 347

UDR name: avgrgb

UDR id : 347

UDR name: avgrgb

UDR id : 350

UDR name: avgblue

UDR id : 349

UDR name: avggreen

UDR id : 348

UDR name: avgred

UDR id : 347

UDR name: avgrgb

使用SQL 指令实现查询计划。要详细了解与优化器相关的SQL 指令,请参考IDS 文档。

此处使用了A VOID_INDEX 指令,指示查询优化器不要使用函数索引。

dbaccess imagedb -

> set explain on;

> select {+avoid_index(images avgrgbindex)}

> * from images where avgrgb(image) > 100;

检查SQL EXPLAIN 输出。该查询计划显示使用了A VOID_INDEX 指令,并展示了全表扫描。

QUERY:

------

select {+avoid_index(images avgrgbindex)}

* from images where avgrgb(image) > 100

DIRECTIVES FOLLOWED:

A VOID_INDEX ( images avgrgbindex )

DIRECTIVES NOT FOLLOWED:

Estimated Cost: 2

Estimated # of Rows Returned: 6

1) .images: SEQUENTIAL SCAN <== Full Table Scan

Filters: .avgrgb(.images.image )> 100

UDRs in query:

--------------

UDR id : 347

UDR name: avgrgb

示例:使用R-Tree 访问方法的函数索引

在本例中,我们将向您展示如何创建使用R-Tree 访问方法的函数索引。R-Tree 数据结构可以保存有关多维数据的信息,并用于有关空间或地理数据的索引。这类索引有助于改善针对空间数据的查询的性能。

要理解本示例,需要熟悉IDS DataBlade 技术。具体来说,您应该能够安装和配置所使用的Spatial DataBlade。有关DataBlade 的详细信息,请参考IBM Informix Spatial DataBlade 用户指南。

本例使用的数据包括一些城市的地理数据和Oregon 州的海啸影响范围。本文下载部分没有提供这些地理数据,但是可以通过Oregon Geospatial Enterprise Office 网站自由获取。可从该站点下载City Limits 2007 和Tsunami Inundation Line 数据集。

假设您希望查找即将受海啸影响的城市。为此,发出一个空间数据查询,搜索其中心包含在海啸线内的所有城市。要满足这个查询,必须计算地理城市中心,因此,需要创建一个函数索引来计算这个值。由于涉及到空间数据,您需要为这个索引指定R-Tree 访问方法。

下面列出了R-Tree 函数索引的一些有趣特性:

它们不仅是针对相交区域的索引;叶页(leaf page)面保存数据对象本身。

R-Tree 具有高度上的平稳性:

从根页面到任何叶页面的路径均穿过相同数量的层。

所有leave 节点都位于同一级别。

设置

本例中使用的空间函数来自Spatial DataBlade。因此,创建和使用索引不需要编写额外的代码。

该示例针对运行在64 位Linux x86 上的IDS version 11.10 进行了测试。可针对不同平台对指令进行相应修改。

设置以下环境变量:

INFORMIXDIR the location of your IDS installation

PA TH add $INFORMIXDIR/bin

add $INFORMIXDIR/extend//bin (see below)

安装Spatial DataBlade。安装指导可从IDS 11.10 信息中心获得(参考本文末尾的链接)。

下面的指令假设您已经在默认位置安装好了Spatial DataBlade version 8.21:$INFORMIXDIR/extend/spatial.8.21.xC1,其中‘x’ 表示特定于平台的字母。对于64 位Linux x86,默认位置为$INFORMIXDIR/extend/spatial.8.21.FC1。可根据您的环境对指令作出相应修改。

为空间数据创建sbspace。注意:sbspace 名必须与ONCONFIG 文件中的SYSSBSPACENAME 值匹配。本例假设sbspace 名为syssbspace。

在与根dbspace 相同的目录中创建名为syssbspace 的空文件(ONCONFIG 文件中ROOTPATH 的值指定根dbspace 的名称和位置)。

将文件所有权改为informix:informix。

将文件权限改为mode 660。

以用户informix 的身份,创建sbspace:

onspaces -c -S syssbspace -p /syssbspace -o 0 -s 100000

创建您的数据库。

dbaccess - -

create database spatialdb;

注册Spatial DataBlade。

使用blademgr 实用工具注册Spatial DataBlade。Spatial DataBlade 依赖于R-Tree DataBlade,后者由IDS 自动附带。因此,必须同时向您的数据库注册这两个DataBlade。

blademgr

register ifxrltree.2.00 spatialdb

register spatial.8.21.FC1 spatialdb

list spatialdb

DataBlade modules registered in database spatialdb:

ifxrltree.2.00 spatial.8.21.FC1

加载空间数据。

从City Limits 2007 和Tsunami Inundation Line 下载中提取文件,并分别保存在两个目录中,即citylim_2007 和tsunami:

ls citylim_2007

citylim_2007.dbf

citylim_2007.prj

citylim_2007.sbn

citylim_2007.sbx

citylim_2007.shp

citylim_2007.shp.xml

citylim_2007.shx

ls tsunami

PRJdevelopment.pdf

tsunami.dbf

tsunami.html

tsunami.pdf

tsunami.prj

tsunami.shp

tsunami.shp.xml

tsunami.shx

注意:在UNIX 上,数据文件名称区分大小写,而且必须为小写。这是Shapefile 数据的要求。如果文件名不正确,那么loadshp 实用工具将报告错误,指出它无法找到数据文件。

关于如何正确配置投影数据超出本文讨论的范围。如果没有正确配置,loadshp 实用工具在尝试处理投影信息时将返回错误,因此,隐藏或删除扩展名为'prj' 的文件:

rm citylim_2007/citylim_2007.prj

rm tsunami/tsunami.prj

使用Spatial DataBlade 附带的loadshp 实用工具将数据加载到IDS 中。该实用工具位于$INFORMIXDIR/extend/spatial.8.21.FC1/bin 中。loadshp 创建了两个表:cities 和tsunami,并将空间数据分别加载到citylim 和inundation 列中。

$INFORMIXDIDR/extend/spatial.8.21.FC1/bin/loadshp -o create -D spatialdb2 -l cities,citylim -f /citylim_2007

$INFORMIXDIDR/extend/spatial.8.21.FC1/bin/loadshp -o create -D spatialdb2 -l tsunami,inundation -f /tsunami

查询

发出查询。在这个查询中,

st_intersects、st_centroid 和st_envelope 由Spatial DataBlade 提供

st_envelope 计算每条海啸线的边界,返回类型st_multilinestring

st_centroid 计算每个城市的中心,返回类型st_multipolygon

st_intersects 可确定两种结构是否相互交叉

这次没有定义函数索引。

dbaccess spatialdb -

set explain on;

select city_name from cities, tsunami

where st_intersects( st_centroid( citylim ), st_envelope( inundation ) );

city_name

Astoria

Bandon

Bay City

Brookings

Cannon Beach

Cave Junction

Coos Bay

Coquille

Depoe Bay

Dunes City

Elkton

Falls City

Florence

Garibaldi

Gearhart

Glendale

Gold Beach

Grants Pass

Lakeside

Lincoln City

Manzanita

Myrtle Point

Nehalem

Newport

North Bend

Port Orford

Powers

Reedsport

Riddle

Rockaway Beach

Seaside

Siletz

Tillamook

Toledo

Waldport

Warrenton

Wheeler

Willamina

Winston

Yachats

40 row(s) retrieved.

检查SQL EXPLAIN 输出。该查询计划显示了全表扫描。针对每一个元组(tuple)执行st_centroid() 计算。

QUERY:

------

select city_name from cities, tsunami

where st_intersects( st_centroid( citylim ), st_envelope( inundation ) )

Estimated Cost: 25671

Estimated # of Rows Returned: 7018

1) .tsunami: SEQUENTIAL SCAN <== Full Table Scan

2) .cities: SEQUENTIAL SCAN <== Full Table Scan

Filters: informix.st_intersects(informix.st_centroid(.cities.citylim ),

|--10--------20--------30--------40--------50--------60--------70--------80--------9|

|-------- XML error: The previous line is longer than the max of 90 characters ---------|

informix.st_envelope(.tsunami.inundation ))

NESTED LOOP JOIN

UDRs in query:

--------------

UDR id : 662

UDR name: st_intersects

UDR id : 626

UDR name: st_envelope

UDR id : 567

UDR name: st_centroid

创建函数索引计算城市中心。

dbaccess spatialdb -

create index citycenterindex

on cities( st_centroid( citylim ) st_geometry_ops )

using rtree;

有关这个索引,需注意以下几点:

指定R-Tree 访问方法。

st_centroid() 计算城市中心。

st_geometry_ops 指定操作符类。

将操作符类与访问方法结合使用,可以指定创建索引和优化查询时使用的操作符。操作符类通常为一组函数。对于Spatial DataBlade,st_geometry_ops 类由以下函数组成:

ST_Contains()

ST_Crosses()

ST_Equals()

SE_EnvelopesIntersect()

ST_Intersects()

SE_Nearest()

SE_NearestBbox()

ST_Overlaps()

ST_Touches()

ST_Within()

执行相同的查询。

dbaccess spatialdb -

select city_name from cities, tsunami

where st_intersects( st_centroid( citylim ), st_envelope( inundation ) );

注意:当索引表达式被用于关系表达式,或作为某个操作符类函数的参数时,查询优化器将考虑使用函数索引。由于st_centroid() 是索引st_geometry_ops 中指定的操作符类的成员,优化器在生成查询计划时将考虑使用索引。

注意:优化器不会对下面这个查询使用函数索引。这是因为st_distance() 不属于st_geometry_ops() 操作符类。

select city_name from cities, tsunami

where st_distance( st_centroid( citylim ), inundation ) < 5280;

检查SQL EXPLAIN 输出。该查询计划显示索引扫描使用了函数索引。

注意:查询优化器只有在表统计信息保持最新的情况下使用R-Tree 索引。这意味着您应该在创建索引之前加载数据,或者在加载数据之后更新表的统计信息。

QUERY:

------

select city_name from cities, tsunami

where st_intersects( st_centroid( citylim ), st_envelope( inundation ) )

Estimated Cost: 12920

Estimated # of Rows Returned: 7018

1) .tsunami: SEQUENTIAL SCAN

2) .cities: INDEX PA TH <== Index Scan

(1) VII Index Keys: informix.st_centroid(citylim) (Serial, fragments: ALL)

VII Index Filter:

informix.st_intersects(informix.st_centroid(.cities.citylim),

informix.st_envelope(.tsunami.inundation ))

NESTED LOOP JOIN

UDRs in query:

--------------

UDR id : 662

UDR name: st_intersects

UDR id : 626

UDR name: st_envelope

UDR id : 567

UDR name: st_centroid

UDR id : 567

UDR name: st_centroid

结束语

函数索引是一种强大的性能调优工具。通过减少执行查询时需要检索的元组(tuple)的数量,以及减少查询所需的计算,函数索引能够显著改善性能。

除大型对象外,函数索引可以返回任何标准SQL 类型。同样,函数索引还可以返回用户定义的类型。函数索引可以指定各种不同的访问方法,包括B-Tree、R-Tree 和用户定义的访问方法。

函数索引的存储和维护成本较高。您应该对系统进行成本收益分析,并只在能保证获益的情况下创建函数索引。如果数据大小较小,或者索引对于数据库查询的性能改善帮助不大,则不适合使用函数索引。

本文提供了一些有关函数索引的示例。希望我们介绍的这些创建和使用函数索引的方法能够帮助您改善查询搜索的性能。

INDEX索引函数语法

名师整理优秀资源 1、index语法 index(区域,第几行,第几列) 返回区域第几行第几列的数值。 参数还是很好理解的。 注意的就是:如果区域为同一行,可以省略第二个参数;同样如果区域为同一列,可以省略第三个参数。 下面看实例: 讲解一下。我们挑INDEX(A1:C6,2,2)单元格,所以公B2行、第2列的值,交叉点即2C6A1意思是返回:这个区域第。姓名式结果是 名师整理优秀资源

一列嘛。/单列区域只需要两个参数就行了,因为只有一行/单行 ;INDEX(B2:B6,2)也就是返回第二行的张三。也就是返回第列列的成绩INDEX(B2:C2,2) 和match配合、2index 函数配合,常用来查询。matchindex函数和index来查询,现在展示vlookup查询张三的成绩。比如下面的例子,我们可以使用和match的配合。 INDEX(C2:C6,MATCH(E2,B2:B6,0)) 名师整理优秀资源 现在分析一下,在函数组合的文章中,我们讲到了函数组合的剖析要从内到外。2。B2在:B6的位置,是先看内部的MATCH(E2,B2:B6,0),是返回张三了。,就是 30INDEX(C2:C6,2)MATCH(E2,B2:B6,0)那么把替换成2再看:这么复杂的组合有matchindex 肯定有同学会说:我已经会了vlookup,再学和个卵用?其实作用还是很大的,看下面的例子:

根据蓝色区域的信息,查询张三和王五的成绩、性别、班级。. 名师整理优秀资源 如果用vlookup,公式如下: 3个公式才可以。成绩、性别、班级需要手动编辑match配合,一个公式就可以搞定了。如果用index和B8的公式: INDEX($A$1:$D$5,MATCH($A8,$A$1:$A$5,0),MATCH(B$7,$A$1:$D$1,0)) 公式很复杂,我们讲解一下:这个区域被锁定了,公式怎么拖动都不会改变。1、$A$1:$D$5表中的位置。$A8张三在$A$1:$A$5MATCH($A8,$A$1:$A$5,0)2、,是返回。。。、示公式向右拖动不变,向下拖动还是正常的$A9$A10表B$7$A$1:$D$1成绩在中的位置。 MATCH(B$7,$A$1:$D$1,0)3、,是返回。B$7,向下拖动被锁定了一直时D$7、C$7示公式向

MATLAB常用命令索引

MATLAB命令索引 MATLAB命令索引 管理命令和函数 help 在线帮助文件 doc 装入超文本说明 what M、MAT、MEX文件的目录列表 type 列出M文件 lookfor 通过help条目搜索关键字 which 定位函数和文件 Demo 运行演示程序 Path 控制MATLAB的搜索路径 管理变量和工作空间 Who 列出当前变量 Whos 列出当前变量(长表) Load 从磁盘文件中恢复变量 Save 保存工作空间变量 Clear 从内存中清除变量和函数 Pack 整理工作空间内存 Size 矩阵的尺寸 Length 向量的长度 disp 显示矩阵或 与文件和*作系统有关的命令 cd 改变当前工作目录 Dir 目录列表 Delete 删除文件 Getenv 获取环境变量值 ! 执行DOS*作系统命令 Unix 执行UNIX*作系统命令并返回结果 Diary 保存MATLAB任务 控制命令窗口 Cedit 设置命令行编辑 Clc 清命令窗口 Home 光标置左上角 Format 设置输出格式 Echo 底稿文件内使用的回显命令 more 在命令窗口中控制分页输出 启动和退出MATLAB Quit 退出MATLAB Startup 引用MATLAB时所执行的M文件 Matlabrc 主启动M文件 一般信息 Info MATLAB系统信息及Mathworks公司信息 Subscribe 成为MATLAB的订购用户 hostid MATLAB主服务程序的识别代号

Whatsnew 在说明书中未包含的新信息 Ver 版本信息 *作符和特殊字符 + 加 —减 * 矩阵乘法 .* 数组乘法 ^ 矩阵幂 .^ 数组幂 \ 左除或反斜杠 / 右除或斜杠 ./ 数组除 Kron Kronecker张量积 : 冒号 ( ) 圆括号 [ ] 方括号 . 小数点 .. 父目录 …继续 , 逗号 ; 分号 % 注释 ! 感叹号 ‘转置或引用 = 赋值 = = 相等 < > 关系*作符 & 逻辑与 | 逻辑或 ~ 逻辑非 xor 逻辑异或 逻辑函数 Exist 检查变量或函数是否存在 Any 向量的任一元为真,则其值为真 All 向量的所有元为真,则其值为真 Find 找出非零元素的索引号 三角函数 Sin 正弦 Sinh 双曲正弦 Asin 反正弦 Asinh 反双曲正弦 Cos 余弦 Cosh 双曲余弦 Acos 反余弦

数据库索引

索引的是一种功能 索引是个既稳定又开放的信息结构,它有十一种功能。 1 分解功能 把文献中的资料单元(如篇名、机构、短语、概念、物名、地名、书名、人名、字词、符号等)一一分解,这就是索引的分解功能。它是索引工作的起跑线和索引编纂的基础,没有对文献内容的这种分解功能,就没有索引。 过去有些反对索引的人说,索引是把古人的著书“凌迟碎割”。他们对索引法的反对,实出于对流传已久的那种落后的皓首穷经的陋习的偏爱和对新的治学方法的无知,洪业曾鄙视他们为卧于涸辙的鲋鱼,以升斗之水济命,而不知西江水之可羡。虽然如此,但他们所谓的索引是把古人著书“凌迟碎割”的形象说法,却从反面十分正确地道破了索引的分解功能。 分解功能是索引作用于文献的特殊功能,是它和其他检索工作不同之处。 2 梳理功能 每种文献都包容着许多不同性质的资料单元,它们在文献中基本呈无序的状态。把这些无序状态的资料单元按外表特征或内容性质进行各归其类的整理,这就是索引的梳理功能。章学诚早就发现了这种功能,他在给《族孙守一论史表》信中要求其在治二十四史年表时一并把廿二史列传中的人名编成索引,两者互为经纬,这样便可使考古之士,于纷如乱丝之资料中,忽得梳通栉理。 梳理功能是索引分解的后继。如果只有分解功能而没有梳理的功能,那么分解功能就没有价值。 梳理是对资料单元的初分。如是字序,只要按笔划或音序归类即可;如是类序只要按大类归纳即可。就像小姑娘梳头,先把长发梳顺,而编什么辫子或梳什么发型则是下一步的要求了。 3 组合功能 把梳理后的资料单元按照分类的要求,严密地组织它们的类别层次以及类目下的专题和同类目下款目的序列关系;或按字序的要求,严密地把标目的结构正装或倒装、考虑限定词对标目的限定和修饰的级数、或考虑字序和类序相结合的可能。此外,不论是类序或字序都要考虑参照系统的建立方案,使相关款目形成网络,使用户检索的眼界得以拓宽。这些,都是索引的组合功能。 过去,国外的同行曾把圣经的页边索引以“串珠”命名;我国有人曾把本草的方剂编成索引,以“针线”命名,“串珠”和“针线”是索引组合功能很形象的描绘。它使文献资料单元成为一串串的明珠,成为被针线贯穿起来的资料单元的珍品。 4 结网功能 对某个领域的文献进行有计划的索引编纂,利用类型的结构从各种不同的角度和层次对这些文献的内容进行纵横交错和多维的揭示和组合,使之形成一个检索这些文献中的各种不同性质的资料单元的网络。这就是索引的结网功能。 由“主表”和“词族索引”、“范畴索引”、“英汉对照索引”等所组成的《汉语主题词表》是由几种不同性质的索引构建的一个主题词间的联系、辨析主题词词义和被标引的文献主题概念是否精确的一个隐含的语义网络,它对文献中的资料单元产生族性检索和扩大检索途径的作用。这个网络的结构和作用就是运用索引结网功能的一个范例。

实验六 索引的创建和使用(课件)

实验六索引的创建和使用 建议学时:2 实验目的: 1)了解索引的概念、优点及分类。 2)掌握在SQL Server Management Studio 中创建、修改和删除索引的操作。 3)掌握使用T-SQL语句创建、修改和删除索引的操作。 实验内容及步骤: (一)索引的概念 数据库中的索引是一个列表,在这个列表中包含了某个表中一列或者若干列值的集合,以及这些值的记录在数据表中的存储位置的物理地址。 索引的优点: 1.可以大大加快数据检索速度。 2.通过创建唯一索引,可以保证数据记录的唯一性。 3.在使用ORDER BY和GROUP BY子句进行检索数据时,可以显著减少查询中分组和排序的时间。 4.使用索引可以在检索数据的过程中使用优化隐藏器,提高系统性能。 5.可以加速表与表之间的连接,这一点在实现数据的参照完整性方面有特别的意义。 索引的分类: 1.聚集索引 聚集索引基于数据行的键值,在表内排序和存储这些数据行。每个表只能有一个聚集索引,因为数据行本身只能按一个顺序存储,表中的物理顺序和索引中行的物理顺序是相同的。 2.非聚集索引 非聚集索引具有完全独立于数据行的结构,使用非聚集索引不用将物理数据页中的数据按列排序。非聚集索引包含索引键值和指向表数据存储位置的行定位器。可以对表或索引视图创建多个非聚集索引。设计非聚集索引是为了改善经常使用的、没有建立聚集索引的查询的性能。 3.唯一索引 确保索引键不包含重复的值。聚集索引和非聚集索引都可以是唯一索引,这种唯一性与主键约束是相关联的,在某种程度上,主键约束等于唯一性的聚集索引。 (二)SSMS中索引的管理 1.新建索引 【例1】为GZGL数据库中的employee表新建非聚集索引i_emp_age,要求按emp_age 升序完成。 ①在【对象资源管理器】中,展开指定的服务器、数据库和要创建索引的表。右键单击【索引】,然后单击【新建索引】→【非聚集索引】,如图3-45所示。 ②出现的【新建索引】对话框,如图3-46所示。在【索引名称】文本框中输入新建索引的名称i_emp_age,在下面的复选框中可设定是否唯一。 ③在【索引键列】可使用旁边的【添加】按钮添加要设定索引的属性,弹出选择列对话框,如图3-47所示,选择emp_age,然后单击【确定】按钮。 ④返回【新建索引】对话框,在如图3-48所示的【索引键列】中可设置【排序次序】等属性,最后单击“确定”按钮,即可生成新的索引。 如果需要建立基于多个属性的复合索引,可在步骤③中添加多个属性。

word自动生成目录教程

1.下面就来介绍一下如何利用word自动生成目录并动态更新。这里介绍两 种方法: 一、利用大纲级别自动生成目录 如果要插入目录,请单击“插入”菜单,指向“引用”→“索引和目录”,出现“索引和目录”的画面,点击“目录”标签,倘若直接按下“确定” 按钮,则会以黑体字提示“错误!未找到目录项”。 那么何谓“目录项”呢?目录项即文档中用来显示成为目录内容的一段或一行文本。因此,要想自动显示目录,必先定义目录项。 目录项的定义很简单,点击“视图”→“大纲”切换至大纲模式,如下图所示,大纲模式下文档各段落的级别显示得清楚,选定文章标题,将之定义为“1级”,接着依次选定需要设置为目录项的文字,将之逐一定义为“2级”。当然,若有必要,可继续定义“3级”目录项。 定义完毕,点击“视图”→“页面”回至页面模式,将光标插入文档中欲创建目录处,再次执行“插入”→“引用”→“索引和目录”,出现“索引和目录”画面,点击“目录”标签,则显示如图: 一共只定义了二个级别的目录项,因此将上图“显示级别”中的数字改为“2”。“显示页码”与“页码右对齐”这二项推荐选择,前者的作用是自动显示目录项所在的页面,后者的作用是为了显示美观。“制表符前导符”即目录项与右对齐的页码之间区域的显示符号,可下拉选择;此外,有多种目录显示格式可供选择,下拉“格式”就可以看到了。

最后点“确定”,如图所示,目录就这样生成了,包括页码都自动显示出来了。按住Ctrl键,点击某目录项,当前页面自动跳转至该目录项 所在的页码,很方便吧? 使用这种方法生成目录还有一个好处,如果你想更改目录项,可以切换至大纲模式调整目录项的内容与级别,然后点击一下图中所示的按钮,目录就可以自动更新了-得来全不费功夫! 2.二、标记索引项自动生成目录 第二种实现自动生成目录的方法是标记索引项,即预先将每个目录项标记成为一个索引项,最后实现目录的生成。具体的操作方法是:在页面模式下,选定文章中的第一个目录项,也就是文章的标题,执行“插入”→“引用”→“索引和目录”,出现“索引和目录”画面后点击“索引”标签,接着点击“标记索引项”按鈕,显示这样的窗口: “标记”标记文章标题“一个文坛独行者”为主索引项,这时文中标题出现如下字样(引号内的内容): “{ "一个文坛独行者" }” 接下来定义的是次索引项,操作方法同上,但在标记时应当注意:你所选定的文本内容在默认情况下会出现在“主索引项”而不是“次索引项”中,请在“次索引项”中输入你选定的文本“新作《阿难》:言情+

数据库索引的优缺点及使用时的注意事项

本文介绍了数据库索引,及其优、缺点。针对MySQL索引的特点、应用进行了详细的描述。分析了如何避免MySQL无法使用,如何使用EXPLAIN分析查询语句,如何优化MySQL索引的应用。 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它 们包含着对数据表里所有记录的引用指针。 注:[1]索引不是万能的!索引可以加快数据检索操作,但会使数据修改操作变慢。每修改数据记录,索引就必须刷新一次。为了在某种程序上弥补这一缺陷,许多SQL命令都有一个DELAY_KEY_WRITE项。这个选项的作用是暂时制止MySQL 在该命令每插入一条新记录和每修改一条现有之后立刻对索引进行刷新,对索引的刷新将等到全部记录插入/修改完毕之后再进行。在需要把许多新记录插入某个数据表的场合,DELAY_KEY_WRITE 选项的作用将非常明显。[2]另外,索引还会在硬盘上占用相当大的空间。因此应该只为最经常查询和最经常排序的数据列建立索引。注意,如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。 从理论上讲,完全可以为数据表里的每个字段分别建一个索引,但MySQL把同一个数据表里的索引总数限制为16个。 1. InnoDB数据表的索引 与MyISAM数据表相比,索引对InnoDB数据的重要性要大得多。在InnoDB数据表上,索引对InnoDB数据表的重要性要在得多。在InnoDB数据表上,索引不仅会在搜索数据记录时发挥作用,还是数据行级锁定机制的苊、基础。"数据行级锁定"的意思是指在事务操作的执行过程中锁定正在被处理的个别记录,不让其他用户进行访问。这种锁定将影响到(但不限于)SELECT...LOCK IN SHARE MODE、SELECT...FOR UPDATE命令以及INSERT、UPDATE和DELETE命令。 出于效率方面的考虑,InnoDB数据表的数据行级锁定实际发生在它们的索引上,而不是数据表自身上。显然,数据行级锁定机制只有在有关的数据表有一个合适的索引可供锁定的时候才能发挥效力。 2. 限制 如果WEHERE子句的查询条件里有不等号(WHERE coloum != ...),MySQL将无法使用索引。 类似地,如果WHERE子句的查询条件里使用了函数(WHERE DAY(column) = ...),MySQL也将无法使用索引。 在JOIN操作中(需要从多个数据表提取数据时),MySQL只有在主键和外键的数 据类型相同时才能使用索引。

数据库实验 索引的创建与使用

实验三:索引的创建与使用 一、实验目的: 1、理解索引的概念和索引的作用。 2、掌握创建索引的方法。 3、学会使用索引。 4、了解聚簇索引和非聚簇索引。 二、实验要求:(必做) 硬件:Intel Pentium 120或以上级别的CPU,大于16MB的内存。 软件:Windows 95/98/2000操作系统,关系数据库管理系统SQL SERVER 2000。 学时:2学时 三、实验内容: 1、用create index在学生表student的学号sno上建立聚簇索引。 2、在学生表student中,为姓名sname建立非聚簇索引。 3、在课程表的课程号Cno上建立唯一索引。 4、在选课表的学号sno、成绩Grade上建立复合索引,要求学号为升序,学号相同时 成绩为降序。 5、用drop删除学生表student的索引。 数据库设计与管理实验报告

实验名称评分 实验日期年月日指导教师 姓名专业班级学号 一、实验目的 二、实验步骤及结果 1、用create index在学生表student的学号sno上建立聚簇索引。 create clustered index stusno on student(sno); 2、在学生表student中,为姓名sname建立非聚簇索引。 create index stusname on student(sname); 3、在课程表的课程号Cno上建立唯一索引。 create unique index coucno on course(cno); 4、在选课表的学号sno、成绩Grade上建立复合索引,要求学号为升序,学号相同时成绩为降序。

matlab常用函数索引.

A a abs 绝对值、模、字符的ASCII码值acos 反余弦 acosh 反双曲余弦 acot 反余切 acoth 反双曲余切 acsc 反余割 acsch 反双曲余割 align 启动图形对象几何位置排列工具all 所有元素非零为真 angle 相角 ans 表达式计算结果的缺省变量名any 所有元素非全零为真 area 面域图 argnames 函数M文件宗量名 asec 反正割 asech 反双曲正割 asin 反正弦 asinh 反双曲正弦 assignin 向变量赋值 atan 反正切 atan2 四象限反正切 atanh 反双曲正切 autumn 红黄调秋色图阵 axes 创建轴对象的低层指令 axis 控制轴刻度和风格的高层指令 B b bar 二维直方图 bar3 三维直方图 bar3h 三维水平直方图 barh 二维水平直方图 base2dec X进制转换为十进制 bin2dec 二进制转换为十进制 blanks 创建空格串 bone 蓝色调黑白色图阵

box 框状坐标轴 break while 或for 环中断指令 brighten 亮度控制 C c capture (3版以前)捕获当前图形 cart2pol 直角坐标变为极或柱坐标 cart2sph 直角坐标变为球坐标 cat 串接成高维数组 caxis 色标尺刻度 cd 指定当前目录 cdedit 启动用户菜单、控件回调函数设计工具cdf2rdf 复数特征值对角阵转为实数块对角阵ceil 向正无穷取整 cell 创建元胞数组 cell2struct 元胞数组转换为构架数组 celldisp 显示元胞数组内容 cellplot 元胞数组内部结构图示 char 把数值、符号、内联类转换为字符对象chi2cdf 分布累计概率函数 chi2inv 分布逆累计概率函数 chi2pdf 分布概率密度函数 chi2rnd 分布随机数发生器 chol Cholesky分解 clabel 等位线标识 cla 清除当前轴 class 获知对象类别或创建对象 clc 清除指令窗 clear 清除内存变量和函数 clf 清除图对象 clock 时钟 colorcube 三浓淡多彩交叉色图矩阵 colordef 设置色彩缺省值 colormap 色图 colspace 列空间的基 close 关闭指定窗口

Matlab操作索引

变量赋值: n 直接赋值 n 冒号赋值 n 函数赋值 注意点:MATLAB是矩阵运算,因此MATLAB运算的基本变量通常都是矩阵。 直接赋值: 对3×3的矩阵A进行赋值 A=[1 3 5;2 4 6;7 8 9] A= 1 3 5 2 4 6 7 8 9 各行元素由分号分隔,同行元素由空格、逗号分隔 冒号赋值: A = S1:S2:S3 其中S1为起始值,S2为步长,S3为终止值。 A = 1:2:10 A = 1 3 5 7 9 步长S2的默认值为1。 A = 1:6 A = 1 2 3 4 5 6 函数赋值: n [ 返回变量列表] =函数名(输入变量列表) x = 1:1:4 y = sin(x) y = 0.8415 0.9093 0.1411 -0.7568 n 库函数 n 基本运算sin()、exp()、sqrt() 、power()、abs()、length()、max()、min()、mod()、rem() 常用数学函数见下表

关系与逻辑运算函数如下: 转义字符表:

特殊矩阵生成函数: n 基本脉冲函数ones()、zeros() n 矩阵运算函数inv()、求行列式det()、LU分解lu()、求对角阵diag()等 矩阵运算: MATLAB的运算都是以矩阵的方式进行 n 矩阵与矩阵的运算 +、-:相同维数的矩阵才能进行加减运算 .*、./:相同维数的矩阵对应元素的乘除运算 *:满足矩阵乘法的规则 ^:方阵才能进行^的幂次运算 n 矩阵与标量的运算 +、-:矩阵各元素都与标量进行加、减 *、/:矩阵各元素都与标量进行乘、除 矩阵元素标识: n 如果要得到矩阵中某一元素或者一组元素,可采用以下方法: A(m,n):第m行、第n列的元素 A(:,n):第n列的所有元素组成的向量 A(m,:):第m行的所有元素元素组成的向量

Word中自动生成目录与目录的自动更新

Word中自动生成目录与目录的自动更新 2009-06-21 10:06:46| 分类:学术记录| 标签:|字号大中小订阅 一、生成目录 1.首先对要显示在目录中的标题应用标题样式(具体方法是将鼠标置于将要生成目录的项目之前,然后点击格式菜单中的“样式与格式”,这样在普通视图的右边就出现了一个“格式与样式”的栏目,你可以用鼠标选定其中的“标题1”、“ 标题2”、“ 标题3”等标题格式,注:这里的“标题1”就是要生成的目录的一级目录,类推“标题2”就是要生成的目录的二级目录……)----这里括号中的内容是我自己试验出来的。 2.把光标定位到要建立目录的位置,目录一般位于文档的开始。 3.执行“插入”→“索引和目录”→“目录”选项卡。 4.“页码”、“制表符”、“格式”等的设置和建立索引相同,不再赘述。在显示级别框中设置要显示的目录级别数(默认为3),如本例使用了三级标题样式,要显示三级目录,就要将其设为“3”,也可以单击“选项”按钮,在“目录选项”

对话框中手动设置。 5.要改变目录的显示效果,可单击“更改”按钮,打开“样式”对话框,其中,目录1管理一级目录,依次类推。选择要改变效果的目录级别,单击“修改”分别进行设置。设置完毕后单击“确定”返回“样式”对话框。 6.单击“确定”按钮,返回“索引和目录”对话框,单击“确定”,目录即插入指定位置。 提示:单击目录条目或页码,可以直接跳转它所对应的标题。 二、更新目录 Word是以域的形式创建目录的,如果文档中的页码或者标题发生了变化,就需要更新目录,使它与文档的内容保持一致。在目录上单击鼠标右键,选择“更新域”即可。也可以选择目录后,按下F9键更新域。 如果想改变目录的显示格式,可以重新执行创建目录的操作,最后,会弹出一个对话框,询问是否要替换所选目录,选择“是”即可替换。或:在Word 中创建目录要执行两个步骤。 第一步是标记要让Word 包括在目录中的文本。第二步是创建目录。

文档结构图和目录自动生成方法

电子版文档点击“视图”→“文档结构图”编成目录,点击可快速链接,且目录随时能够看到;纸质版文档点击“插入”→“引用”→“索引和目录”。二者前提都要点击“视图”→“大纲”,编辑标题级别。具体操作如下: 利用大纲级别自动生成目录 如果要插入目录,请单击“插入”菜单,指向“引用”→“索引和目录”,出现“索引和目录”的画面,点击“目录”标签,倘若直接按下“确定”按钮,则会以黑体字提示“错误!未找到目录项”。那么何谓“目录项”呢?目录项即文档中用来显示成为目录内容的一段或一行文本。因此,要想自动显示目录,必先定义目录项。 目录项的定义很简单,点击“视图”→“大纲”切换至大纲模式,如下图所示,大纲模式下文档各段落的级别显示得清楚,选定文章标题,将之定义为“1级”,接着依次选定需要设置为目录项的文字,将之逐一定义为“2级”。当然,若有必要,可继续定义“3级”目录项。 定义完毕,点击“视图”→“页面”回至页面模式,将光标插入文档中欲创建目录处,再次执行“插入”→“引用”→“索引和目录”,出现“索引和目录”画面,点击“目录”标签,则显示如图: 一共只定义了二个级别的目录项,因此将上图“显示级别”中的数字改为“2”。“显示页码”与“页码右对齐”这二项推荐选择,前者的作用是自动显示目录项所在的页面,后者的作用是为了显示美观。“制表符前导符”即目录项与右对齐的页码之间区域的显示符号,可下拉选择;此外,有多种目录显示格式可供选择,下拉“格式”就可以看到了。 最后点“确定”,如图所示,目录就这样生成了,包括页码都自动显示出来了。按住Ctrl 键,点击某目录项,当前页面自动跳转至该目录项所在的页码,很方便吧?

数据库建立索引的原则

数据库建立索引的原则 使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构,例如employee 表的姓(lname)列。如果要按姓查找特定职员,与必须搜索表中的所有行相比,索引会帮助您更快地获得该信息。 索引是一个单独的、物理的数据库结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。 索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序。数据库使用索引的方式与您使用书籍中的索引的方式很相似:它搜索索引以找到特定值,然后顺指针找到包含该值的行。 在数据库关系图中,您可以在选定表的“索引/键”属性页中创建、编辑或删除每个索引类型。当保存索引所附加到的表,或保存该表所在的关系图时,索引将保存在数据库中。 建立索引的优点 1.大大加快数据的检索速度; 2.创建唯一性索引,保证数据库表中每一行数据的唯一性; 3.加速表和表之间的连接; 4.在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间。 索引的缺点 1.索引需要占物理空间。 2.当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度。 根据数据库的功能,可以在数据库设计器中创建三种索引:唯一索引、主键索引和聚集索引。有关数据库所支持的索引功能的详细信息,请参见数据库文档。 提示尽管唯一索引有助于定位信息,但为获得最佳性能结果,建议改用主键或唯一约束。有关这些约束的更多信息,请参见主键约束和唯一约束。 唯一索引

唯一索引是不允许其中任何两行具有相同索引值的索引。 当现有数据中存在重复的键值时,大多数数据库不允许将新创建的唯一索引与表一起保存。数据库还可能防止添加将在表中创建重复键值的新数据。例如,如果在employee 表中职员的姓(lname) 上创建了唯一索引,则任何两个员工都不能同姓。 有关唯一索引的更多信息,请参见创建唯一索引。 主键索引 数据库表经常有一列或列组合,其值唯一标识表中的每一行。该列称为表的主键。 在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。有关主键的更多信息,请参见定义主键。 聚集索引 在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。 如果某索引不是聚集索引,则表中行的物理顺序与键值的逻辑顺序不匹配。与非聚集索引相比,聚集索引通常提供更快的数据访问速度。 一、索引 1. 概念:索引是揭示文献内容出处,提供文献查考线索的工具书。 2. 类型:种类很多,从不同的角度可以划分出不同的类型。按文种分,可以分为中文索引的外文索引;按收录范围分,可以分为综合性索引和专题性索引;按收录文献的时间分,可以分为近期索引和回溯性索引;按索引款目的标目分,可以分为题名索引、著者索引、语词索引、主题索引、分类索引等。 3. 功能:揭示文献的内容和指引读者查找信息 4. 作用:索引揭示了一书、一刊的基本情况,如篇目、文句。可以深入、完整、详细、系统地为读者提所需文献的具体线索。 铁律一:天下没有免费的午餐,使用索引是需要付出代价的。 索引的优点有目共睹,但是,却很少有人关心过采用索引所需要付出的成本。若数据库管理员能够对索引所需要付出的代价有一个充分的认识,也就不会那么随意到处建立索引了。

word自动生成目录的4种方法

方法一 1、用WORD根据文章的章节自动生成目录 --1.在[格式]中选[样式与格式] --2.出现右边的一条“样式格式”栏,这里面主要就是用到标题1,标题2,标题3。把标题1,标题2,标题3分别应用到文中各个章节的标题上,设置成功后的标题前会出现一黑色小点。--3.当然标题1,标题2,标题3的属性(如字体大小,居中,加粗,等等)可以自行修改的。修改方法:右键点击“标题1”选“修改”,会弹出修改菜单,您可以根据自己的要求自行修改。 --4.当都定义好后,就可以生成目录了。把光标移到文章最开头你要插入目录的空白位置,选[插入]--[引用]--[索引和目录]------5.选第二个选项卡[目录],然后点右下的确定。 ⊙阅读查找内容 方法:只要按住Ctrl点击目录中的某一章节就会直接跳转到该页 ⊙如需再修改文章内容,更新一下目录就会重新把目录对应到相应的页码上去方法:在目录区域内,点右键,选[更新域] 2、设置页眉和页脚 --1、在要分开的地方插入→分隔符→分页符→下一页,此时文章分为两节,两个部分。 --2、插入页眉和页脚:视图→页眉和页脚; --3、在上图中可看到,红色框内“与上一节相同”,表明两节的格式和内容是一样的。若想让

两节的格式不一样,点击“链接到前一节”按钮,之后“与上一节相同”几个字会消失,此时两节则是独立的,不一样的。就可以单独插入格式不同的页眉和页码。 方法二 一篇word文档,内容有大的章,小的节。如何把章节抽出来生成目录? WORD →点击需要插入的地方→ 插入菜单→ 索引和目录→ 目录→ 确定 目录通常是长文档不可缺少的部分,有了目录,用户就能很容易地知道文档中有什么内容,如何查找内容等。Word 提供了自动生成目录的功能,使目录的制作变得非常简便,而且在文档发生了改变以后,还可以利用更新目录的功能来适应文档的变化。 1、创建标题目录 Word 一般是利用标题或者大纲级别来创建目录的。因此,在创建目录之前,应确保希望出现在目录中的标题应用了内置的标题样式(标题1 到标题9)。也可以应用包含大纲级别的样式或者自定义的样式。如果文档的结构性能比较好,创建出合格的目录就会变得非常快速简便。 1.1、从标题样式创建目录 从标题样式创建目录的步骤如下: (1)把光标移到要拖入目录的位置。 (2)单击【插入】菜单项的【索引和目录】菜单项,并在弹出的【索引和目录】对话框选择【目录】选项卡。 (3)在【格式】列表框中选择目录的风格,选择的结果可以通过【打印预览】框来查看。如果选择【来自模板】,标识使用内置的目录样式(目录1 到目录9)来格式化目录。如果要改变目录的样式,可以单击【更改】按钮,按更改样式的方法修改相应的目录样式。 1.2、从其他样式创建目录 如果要从文档的不同样式中创建目录,例如,不需要根据【标题1】到【标题9】的样式来创建目录,而是根据自定义的【样式1】到【样式3】的样式来创建目录,操作步骤如下:(1)将光标移到要插入目录的位置。 (2)打开对话框,然后单击【选项】按钮,弹出【目录选项】对话框。 (3)在【有效样式】列表框中找到标题使用的样式,然后在【目录级别】文本框中指定标题的级别。如果不想用某一样式,要删除【目录级别】文本框中的数字。例如,用户可以删除标题1、标题2 和标题3 后面的【目录级别】中的数字。 (4)单击【确定】按钮,返回到【索引和目录】对话框。 (5)在【索引和目录】对话框中选择合适的选项后单击【确定】按钮。 2、创建图表目录 图表目录也是一种常用的目录,可以在其中列出图片、图表、图形、幻灯片或其他插图的说明,以及它们出现的页码。在建立图表目录时,用户可以根据图表的题注或者自定义样式的图表标签,并参考页序按照排序级别排列,最后在文档中显示图表目录。 使用题注组织目录的方法如下: (1)确保文档中要建立图表目录的图片、表格、图形加有题注。 (2)将光标移到要插入图表目录的地方。

索引的建立和运用

一、问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的编写等体会不出SQL语句各种写法的性能优劣, 但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统的响应速度就成为目前系统需要解决的最主要的问题之一。 系统优化中一个很重要的方面就是SQL语句的优化。对于海量数据,劣质SQL语句和优质SQL语句之间的速度差别可以达到上百倍,可见 对于一个系统不是简单地能实现其功能就可,而是要写出高质量的SQL 语句,提高系统的可用性。 在多数情况下,Oracle使用索引来更快地遍历表,优化器主要根据定义的索引来提高性能。但是,如果在SQL语句的where子句中 写的SQL代码不合理,就会造成优化器删去索引而使用全表扫描,一般就这种SQL语句就是所谓的劣质SQL语句。在编写SQL语句时我们 应清楚优化器根据何种原则来删除索引,这有助于写出高性能的SQL语句。 二、SQL语句编写注意问题 下面就某些SQL语句的where子句编写中需要注意的问题作详细介绍。 在这些where子句中,即使某些列存在索引,但是由于编写了劣质的SQL,系统在运行该SQL语句时也不能使用该索引,而同样使用 全表扫描,这就造成了响应速度的极大降低。 1. IS NULL 与IS NOT NULL 不能用null作索引,任何包含null值的列都将不会被包含在索引中。即使索引有多列这样的情况下,只要这些列中有一列含有null, 该列就会从索引中排除。也就是说如果某列存在空值,即使对该列建索引也不会提高性能。 任何在where子句中使用is null或is not null的语句优化器是不允许使用索引的。 2. 联接列 对于有联接的列,即使最后的联接值为一个静态值,优化器是不会使用索引的。 我们一起来看一个例子,假定有一个职工表(employee),对于一个职工的姓和名分成两列存放(FIRST_NAME和LAST_NAME), 现在要查询一个叫比尔.克林顿(Bill Cliton)的职工。 下面是一个采用联接查询的SQL语句, select * from employee where first_name||''||last_name ='Beill Cliton'; 上面这条语句完全可以查询出是否有Bill Cliton这个员工,但是这里需要注意,系统优化器对基于last_name创建的索引没有 使用。 当采用下面这种SQL语句的编写,Oracle系统就可以采用基于last_name创建的索引。 Select * from employee where first_name ='Beill' and last_name ='Cliton'; 遇到下面这种情况又如何处理呢?如果一个变量(name)中存放着Bill Cliton这个员工的姓名,对于这种情况我们又如何避免 全程遍历,使用索引呢?

目录和索引

摘要:Word给我们办公带来了不少方便,相信大家也是非常熟悉不过了。但是你确定在Word里面所有功能你都会使用吗?相信就算经常与Word打交道的高手也不会说是。今天Word联盟就为大家介绍五种制作Word自动生成目录的方法,哪怕你是刚入门的菜鸟也可以学会哦!方法 Word给我们办公带来了不少方便,相信大家也是非常熟悉不过了。但是你确定在Word里面所有功能你都会使用吗?相信就算经常与Word打交道的高手也不会说是。今天Word联盟就为大家介绍五种制作Word自动生成目录的方法,哪怕你是刚入门的菜鸟也可以学会哦! 方法一 (1) 1、用WORD根据文章的章节自动生成目录 (1) 2、设置页眉和页脚 (2) 方法二 (2) 1、创建标题目录 (2) 1.1、从标题样式创建目录 (2) 1.2、从其他样式创建目录 (3) 2、创建图表目录 (3) 3、创建引文目录 (4) 4、更新目录 (4) 方法三 (5) 1) 修改标题样式的格式 (5) 2) 在各个章节的标题段落应用相应的格式 (5) 3) 提取目录 (5) 方法四 (6) 方法一 1、用WORD根据文章的章节自动生成目录 --1.在[格式]中选[样式与格式] --2.出现右边的一条“样式格式”栏,这里面主要就是用到标题1,标题2,标题3。把标题1,标题2,标题3分别应用到文中各个章节的标题上,设置成功后的标题前会出现一黑色小点。 --3.当然标题1,标题2,标题3的属性(如字体大小,居中,加粗,等等)可以自行修改的。修改方法:右键点击“标题1”选“修改”,会弹出修改菜单,您可以根据自己的要求自行修改。 --4.当都定义好后,就可以生成目录了。把光标移到文章最开头你要插入目录的空白位置,选[插入]--[引用]--[索引和目录]------5.选第二个选项卡[目录],然后点右下的确定。 ⊙阅读查找内容 方法:只要按住Ctrl点击目录中的某一章节就会直接跳转到该页 ⊙如需再修改文章内容,更新一下目录就会重新把目录对应到相应的页码上去

C标准库函数集(头文件索引)

C标准库 C标准库 (1) 1 输入与输出 (1) 2 字符类测试 (19) 3 字符串函数 (22) 4 数学函数 (29) 5 实用函数 (35) 6 诊断 (43) 7 变长变元表 (44) 8 非局部跳转 (45) 9 信号处理 (46) 10 日期与时间函数 (48) 11 由实现定义的限制 (52) 本文包括大部分C标准库函数,但没有列出一些用途有限的函数以及某些可以简单的从其他函数合成的函数,也没有包含多字节和本地化函数。 标准库中的各个函数、类型以及宏分别在以下标准头文件中说明: 1 输入与输出 头文件定义了用于输入和输出的函数、类型和宏。最重要的类型是用于声明文件指针的FILE。另外两个常用的类型是size_t和fpos_t,size_t是由运算符sizeof产生的无符号整类型;fpos_t类型定义能够唯一说明文件中的每个位置的对象。由头部定义的最有用的宏是EOF,其值代表文件的结尾。 1.1 文件操作 1.1.1 fopen

打开以filename所指内容为名字的文件,返回与之关联的流。 mode决定打开的方式,可选值如下: 后六种方式允许对同一文件进行读和写,要注意的是,在写操作和读操作的交替过程中,必须调用fflush()或文件定位函数如fseek()、fsetpos()、rewind()等。 文件名filename的长度最大为FILENAME_MAX个字符,一次最多可打开FOPEN_MAX个文件(在中定义)。 1.1.2 freopen

SQL 创建索引的作用以及如何创建索引

SQL 创建索引的作用以及如何创建索引 SQL 创建索引的作用 一、使用索引的优点: 1、通过唯一性索引(unique)可确保数据的唯一性 2、加快数据的检索速度 3、加快表之间的连接 4、减少分组和排序时间 5、使用优化隐藏器提高系统性能 二、使用索引的原则: 1、在需要经常搜索的列上创建索引 2、主键上创建索引 3、经常用于连接的列上创建索引 4、经常需要根据范围进行搜索的列上创建索引 5、经常需要排序的列上创建索引 6、经常用于where子句的列上创建索引 三、不创建索引的原则: 1、查询很少使用和参考的列不建索引 2、对只有少数值的列不建索引 3、定义为text、image、bit的列不建索引 4、当需要update性能远远高于select性能时不应建索引 四、常用的命令: 1、sp_helpindex :报告表或视图上的索引信息 2、dbcc showcontig :显示指定表的数据和索引的碎片信息 3、dbcc dbreindex :重建指定数据库中一个或多个索引 4、dbcc indexdefrag :整理指定表或视图的聚集索引或辅助索引的碎片 五、优化索引: 1、重建索引(dbcc dbreindex) 2、索引优化向导 3、整理指定的表或视图的聚集索引和辅助索引碎片(dbcc indexefrag) 如何创建索引 CREATE INDEX 语句用于在表中创建索引。 在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。索引 您可以在表中创建索引,以便更加快速高效地查询数据。

用户无法看到索引,它们只能被用来加速搜索/查询。 注释:更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。 SQL CREATE INDEX 语法 在表上创建一个简单的索引。允许使用重复的值: CREATE INDEX index_name ON table_name (column_name) 注释:"column_name" 规定需要索引的列。 SQL CREATE UNIQUE INDEX 语法 在表上创建一个唯一的索引。唯一的索引意味着两个行不能拥有相同的索引值。CREATE UNIQUE INDEX index_name ON table_name (column_name) CREATE INDEX 实例 本例会创建一个简单的索引,名为"PersonIndex",在Person 表的LastName 列: CREATE INDEX PersonIndex ON Person (LastName) 如果您希望以降序索引某个列中的值,您可以在列名称之后添加保留字DESC: CREATE INDEX PersonIndex ON Person (LastName DESC) 假如您希望索引不止一个列,您可以在括号中列出这些列的名称,用逗号隔开:CREATE INDEX PersonIndex ON Person (LastName, FirstName)

自动生成文章目录的操作

自动生成文章目录的操作: 一、设置标题格式 1.选中文章中的所有一级标题; 2.在“格式”工具栏的左端,“样式”列表中单击“标题1”。 仿照步骤1、2设置二、三级标题格式为标题2、标题3。 二、自动生成目录 1.把光标定位到文章第1页的首行第1个字符左侧(目录应在文章的前面); 2.执行菜单命令“插入/引用/索引和目录”打开“索引的目录”对话框; 3.在对话框中单击“目录”选项卡,进行相关设置后,单击“确定”按钮,文章的目录自动生成完成。 目录是用来列出文档中的各级标题及标题在文档中相对应的页码。首先介绍Word的一个概念:大纲级别。Word使用层次结构来组织文档,大纲级别就是段落所处层次的级别编号,Word提供9级大纲级别,对一般的文档来说足够使用了。Word的目录提取是基于大纲级别和段落样式的,在Normal模板中已经提供了内置的标题样式,命名为“标题1”、“标题2”,…,“标题9”,分别对应大纲级别的1-9。我们也可以不使用内置的标题样式而采用自定义样式,但有点麻烦。中的目录制作方法直接使用Word的内置标题样式,关于自定义样式的方法请参阅Word的帮助文档。 目录的制作分三步进行。 1) 修改标题样式的格式。通常Word内置的标题样式不符合论文格式要求,需要手动修改。在菜单栏上点“格式|样式”,列表下拉框中选“所有样式”,点击相应的标题样式,然后点“更改”。可修改的内容包括字体、段落、制表位和编号等,按论文格式的要求分别修改标题1-3的格式。 2) 在各个章节的标题段落应用相应的格式。章的标题使用“标题1”样式,节标题使用“标题2”,第三层次标题使用“标题3”。使用样式来设置标题的格式还有一个优点,就是更改标题的格式非常方便。假如要把所有一级标题的字号改为小三,只需更改“标题1”样式的格式设置,然后自动更新,所有章的标题字号都变为小三号,不用手工去一一修改,即麻烦又容易出错。关于如何应用样式和自动更新样式,请参考Word帮助。 3) 提取目录。按论文格式要求,目录放在正文的前面。在正文前插入一新页(在第一章的标题前插入一个分页符),光标移到新页的开始,添加“目录”二字,并设置好格式。

相关主题
文本预览
相关文档 最新文档