informix建临时表索引
select constrname from sysconstraints where constrtype='R' and tabid= ( select tabid from systables where tabname = 'tst_1' ) ; ----'R'查找外键,'P'查找主键
------针对informix数据库-----------------------------------------------------------
ALTER TABLE yourtable DROP CONSTRAINT constrname;
yourtable :你要删除的约束所在的表名称;
constrname :你要删除的约束名称;
constrname的获得:
在informix数据库中有一个系统表:sysconstraints
该表中存储了数据库所有的约束的基本信息:
constrid :约束标示
constrname :约束名称
owner :owner的用户名称
tabid :表标示
constrtype :约束类型
取值:C(check constraint)、P(Primary key)、R(Referential)、U(Unique)、N(Not Null)其中R则是你所需要的。
idxname :索引名称
根据tabid从另一个系统表systables中检索tabname。
希望对你有帮助。
select constrname from sysconstraints where constrtype='R' and tabid= ( select tabid from systables where tabname = 'tst_1' ) ; ----'R'查找外键,'P'查找主键
------针对informix数据库-----------------------------------------------------------
ALTER TABLE yourtable DROP CONSTRAINT constrname;
yourtable :你要删除的约束所在的表名称;
constrname :你要删除的约束名称;
constrname的获得:
在informix数据库中有一个系统表:sysconstraints
该表中存储了数据库所有的约束的基本信息:
constrid :约束标示
constrname :约束名称
owner wner的用户名称
tabid :表标示
constrtype :约束类型
取值:C(check constraint)、P(Primary key)、R(Referential)、U(Unique)、N(Not Null)其中R则是你所需要的。
idxname :索引名称
根据tabid从另一个系统表systables中检索tabname
--查看索引定义
select dbms_metadata.get_ddl('INDEX','IDX_PG_HY_YDNSRXX_PGFAXH') from dual;
--在某个用户下找所有的索引
select user_indexes.table_name, user_indexes.index_name,uniqueness, column_name
from user_ind_columns, user_indexes
where user_ind_columns.index_name = user_indexes.index_name
and user_ind_columns.table_name = user_indexes.table_name
order by user_indexes.table_type, user_indexes.table_name,
user_indexes.index_name, column_position;
--查看索引
select INDEX_NAME,table_name ,COLUMN_NAME,INDEX_OWNER from dba_ind_columns where TABLE_NAME='PG_HY_YDNSRXX';
--查找所有索引
select * from all_indexes;
select constrname from sysconstraints
where tabid in (select tabid from systables where tabname='basetab_pps');
下面可以谈谈如何恢复损坏得索引了:
1、 如果是普通得索引。这样就相对得简单了;删除并重建他就可以了。
drop index idx-name;
create index idx-name on tabname(colname1,colname2…);
2、 如果是主键损坏;同样可以删除并重建他。
A、 删除主键
select constrname from sysconstraints
where tabid in (select tabid from systables where tabname='tabname');
alter table tabname drop constraint cons_name;
B、 重建主键
alter table basetab_pps add constraint primary key (colname1,colname2…);
3、如果重建都有问题;那么最后一招;只有将表重建了。导出数据和建表语句;删除表、重建表、重建索引。。。
关于索引的问题最后讨论一下;统计更新【upadte statistics】的作用
举个简单的例子:
试验一:
在dbaccess 中执行如下操作:
drop table t1
create table t1 (c1 int,c2 char(10));
create index i_t1 on t1 (c1);
insert into t1 values (1,1);
insert into t1 values (2,1);
insert into t1 values (3,1);
set explain on --
select * from t1 where c1 = 2;
在运行目录下的sqexplain.out文件中看到:
QUERY:
------
select * from t1 where c1 = 2
Estimated Cost: 2
Estimated # of Rows Returned: 2
1) smpmml.t1: SEQUENTIAL SCAN
Filters: smpmml.t1.c1 = 2
试验二:
在dbaccess 中执行如下操作:
drop table t1
create table t1 (c1 int,c2 char(10));
create index i_t1 on t1 (c1);
insert into t1 values (1,1);
insert into t1 values (2,1);
insert into t1 values (3,1);
update statistics for table t1;
set explain on
select * from t1 where c1 = 2;
在运行目录下的sqexplain.out文件中看到:
QUERY:
------
select * from t1 where c1 = 2
Estimated Cost: 1
Estimated # of Rows Returned: 1
1) smpmml.t1: INDEX PATH
(1) Index Keys: c1
Lower Index Filter: smpmml.t1.c1 = 2
试验三:
在dbaccess 中执行如下操作:
drop table t1
create table t1 (c1 int,c2 char(10));
create unique index i_t1 on t1 (c1);
insert into t1 values (1,1);
insert into t1 values (2,1);
insert into t1 values (3,1);
set explain on
select * from t1 where c1 = 2;
在运行目录下的sqexplain.out文件中看到:
QUERY:
------
select * from t1 where c1 = 2
Estimated Cost: 2
Estimated # of Rows Returned: 1
1) smpmml.t1: INDEX PATH
(1) Index Keys: c1
Lower Index Filter: smpmml.t1.c1 = 2
分析一下:
试验一:建立了一般的索引;对按索引字段进行搜索;但是没有用到刚建立起来的索引。按全表扫描SEQUENTIAL SCAN进行查找。
试验二:建立了一般的索引;并且进行了统计更新后;对按索引字段进行搜索;使用到建立起来的索引。INDEX PATH
试验三:建立了唯一索引;对按索引字段进行搜索;使用到了刚建立起来的索引。INDEX PATH;显然如果建立了主键【特殊的唯一索引】;现象将是一样的。
我们可以这样说;如果建立了主键或唯一索引;立马就能生效;这也是我们在WIN的安装、升级或维护过程中建立了一些表没有做统计更新同样能用到索引的原因。而如果建立的不是唯一索引;就需要执行统计更新才能用到索引。
实际上统计更新除了能决定是否使用到索引外;还有使用这些统计信息如何使用索引及其他方式进行查询的目的。具体如何使用这些信息来决定查询路径就比较底层了。只知道通过执行update statistics命令,就可以使系统表systables、sysdistrib、syscolumns、sysindexes等表内的记录数、表空间的页数、记录长度、字段不同值个数、字段值的分布、索引的层数等信息得到更新。而服务器在进行语法分析后能通过查询优化器根据这些统计信息找到最有效的执行SQL的路径。
syscolumns:描述数据库中表的列;
sysindexes:描述数据库中列的索引;
sysfragments:存储了分段索引的片段信息;
sysfragauth:表识别列级权限;
sysviews:描述了数据库中定义的每个视图;
sysdpend:描述了视图是如何依赖其他视图和表的;
syssyntable:定义每一个同义词及其所代表的对象;
sysconstraints:记录了加载在数据库表列上的约束;
sysreferences:列出了放置在数据库上的参照约束,它为数据库的每个参照约束建立一行
syscoldepend:记录了涉及检查约束的所有列,包括在约束中每列都会在syscoldepend表中创建一行;
sysprocedures:存放数据库中每个过程的特征;
sysprocplan:装载了过程执行所需的两项内容(执行计划或查询计划、附属列表);
sysprocauth:描述授予存储过程的权限;
systriggers:装载了关于触发器的信息;
sysblobs:确定BLOB列的存储位置;
sysroleauth:描述授予用户的角色;
sysobjstate:存储了关于数据库对象的状态信息;
sysvlolations:违例或诊断表;
sysdefaults:描述数据库中表的列的默认值;
informix建临时表索引的更多相关文章
- SQL 语句调优 where 条件 数据类型 临时表 索引
基本原则 避免全表扫描 建立索引 尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理 尽量避免大事务操作,提高系统并发能力 使用基于游标的方法或临时表方法之前,应先寻找基于集的解决方 ...
- SAP建数据库索引
[转]SAP建数据库索引 %_hints db6 'INDEX("MKPF","MKPF~BUD")' db6 'INDEX(&quo ...
- MySQL巧建sum索引帮我们提高至少100%的效率
有两个表,表a CREATE TABLE `a` ( `id` mediumint() unsigned NOT NULL AUTO_INCREMENT, `fid` ) unsigned ', `c ...
- Mysql建了索引查询很慢
遇到一个问题,有几个结构一个的查询,表的索引建的也一样,但是有的查询很快,有的却很慢,需要半分钟以上才能执行完. 查看执行计划,并没有什么区别.找了很久原因才发现是主查询和子查询所涉及的表的字符编码不 ...
- 如何加快建 index 索引 的时间
朋友在500w的表上建索引,半个小时都没有结束.所以就讨论如何提速. 一.先来看一下创建索引要做哪些操作:1. 把index key的data 读到内存==>如果data 没在db_cache ...
- Oracle不能并行直接添加主键的方法:先建唯一索引后建主键
环境:Oracle 11.2.0.3 需求:生产一张表由于前期设计不当,没有主键.现需要添加主键,数据量很大,想并行建立. 1.直接添加,提示ora-3001:未实施的功能;只能单线程建立主键 SQL ...
- SQL 数据优化索引建suo避免全表扫描
首先什么是全表扫描和索引扫描?全表扫描所有数据过一遍才能显示数据结果,索引扫描就是索引,只需要扫描一部分数据就可以得到结果.如果数据没建立索引. 无索引的情况下搜索数据的速度和占用内存就会比用索引的检 ...
- 高性能MySQL--创建高性能的索引
关于MySQL的优化,相信很多人都听过这一条:避免使用select *来查找字段,而是要在select后面写上具体的字段. 那么这么做的原因相信大家都应该知道:减少数据量的传输. 但我要讲的是另外一个 ...
- SQL通用优化方案(where优化、索引优化、分页优化、事务优化、临时表优化)
SQL通用优化方案:1. 使用参数化查询:防止SQL注入,预编译SQL命令提高效率2. 去掉不必要的查询和搜索字段:其实在项目的实际应用中,很多查询条件是可有可无的,能从源头上避免的多余功能尽量砍掉, ...
随机推荐
- python json数组对象排序
arr = [{"name": "name_1", "level": 1}, {"name": "name_2 ...
- web.xml讲解
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "- ...
- 【转载】pygame安装与两种版本的Python兼容问题
在开始学习游戏编程之前,我们先来安装下pygame和python3.2.5 参考园友: http://www.cnblogs.com/hongten/p/hongten_pygame_install. ...
- erlang虚拟机代码执行原理
转载:http://blog.csdn.NET/mycwq/article/details/45653897 erlang是开源的,很多人都研究过源代码.但是,从erlang代码到c代码,这是个不小 ...
- JUnit——(一)使用IDEA进行基本操作
JUnit是一个回归测试框架(regression testing framework).Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(Wh ...
- Scala 中的 apply 和 update 方法[转]
原文链接:http://blog.csdn.net/lyrebing/article/details/21696581 Scala 是构建在 JVM 上的静态类型的脚本语言,而脚本语言总是会有些约定来 ...
- C# 语言规范_版本5.0 (第14章 枚举)
1. 枚举 枚举类型 (enum type) 是一种独特的值类型(第 4.1 节),它用于声明一组命名的常量. 下面的示例 enum Color { Red, Green, Blue } 声明一个名为 ...
- 编译搭建Lamp服务器
Lamp 是目前倍受欢迎的一种网站服务器.其主要有linux+apache+mysql+php 组成.由于其组成成员都是开源免费的产品,所以被作为中小型网站服务器的选择.LZ之前在学校学linux的时 ...
- ResScope (软件资源分析)V1.94 绿色版
软件名称:ResScope (软件资源分析)V1.94 绿色版软件类别:国产软件运行环境:Windows软件语言:简体中文授权方式:免费版软件大小:1.47 MB软件等级:整理时间:2015-01-0 ...
- JAVA的if用法,比如if(...){} 和if()没有大括号直接写下面的区别是什么
有大括号的时候 大括号里面所有的 都归if管.只有条件为真的时候 才会执行.没有大括号的时候 只有下面的一句归if管,也就是说 当只有一句的时候 大括号可以省略 其它的 没区别.