Sybase IQ 提供了很多系统存储过程,这些存储过程一般以sp_iq开头,例如sp_iqtable、sp_iqcolumn、sp_iqindex、sp_iqdbspace、sp_iqfile等等。通过使用这些存储过程,数据库管理员或者应用开发人员(需要DBA授予相应存储过程的执行权限)可以获得数据库、dbspaces、数据库对象的相关信息。
当IQ数据库中表的个数不太多的时候,一些系统存储过程执行速度还是比较快的。但是当库中表的数量较多时,有些系统存储过程的执行速度会比较慢。下面的将描述这些存储过程,并给出一些相关建议。
1. sp_iqtable
如果在表的数量比较多的数据库(根据我的测试,几千个表或是几万个表可以认为是比较多的表)中执行 sp_iqtable(不带任何参数),那么速度会比较慢。在我的一个测试环境中(有2500张表),这个存储过程执行完大约需要30秒。
建议:
(1) 如果可能,最好在执行sp_iqtable时指定参数,例如指定表名:
sp_iqtable 'tpch_user.lineitem'或是
select * from sp_iqtable('tpch_user.lineitem')
上面的这两个用法当表数量较多的时候执行起来任然比较快,在我的测试环境中执行只需要大
约0.3秒。
(2) 执行select count(*) from sp_iqtable() 这种用法是可以的,当表的数量比较多时速度仍然
比较快。
2. sp_iqcolumn
我的一个测试环境中(有2500张表),执行sp_iqcolumn 'lineitem' 大约需要5秒。而表的个数
比较少时(不到10个),执行同样的存储过程只需要大约0.1秒。
建议:
(1) 这个存储过程还可以,虽然当表的数量较多时变慢了,但是还可以接受。
(2) 在查看某个表的定义的列信息时,我们经常会使用它。只是需要做好准备,当库中的表个
数比较多时,执行的会慢一些。
3
. sp_iqhelp
我的一个测试环境中(有2500张表),执行 sp_iqhelp 'lineitem' 大约需要116秒。而表的个数
比较少时(不到10个),执行同样的存储过程只需要大约2.5秒。
建议:
(1) 当表的个数较多时,这个存储过程执行比较慢,慎用这个存储过程!
4. sp_iqdbspaceinfo
我的一个测试环境中(有2500张表),执行sp_iqdbspaceinfo 'TPCH_USER_MAIN'或者select owner,object_name from sp_iqdbspaceinfo('TPCH_USER_MAIN',NULL,NULL,'table')大约都需要213秒。
建议:
(1) 如果可能最好不要使用上面的方法执行存储过程,如果想通过sp_iqdbspaceinfo存储过程
获得某个dbspace上有哪些表,不要使用上面的方法,而是使用如下访问系统表的方法:
select creator,tname
from SYSCATALOG
where dbspacename = 'TPCH_USER_MAIN' and tabletype='TABLE';
(2) 当表的个数较多时,为存储过程指定尽可能多的参数可以提高速度,例如:
sp_iqdbspaceinfo 'TPCH_USER_MAIN','tpch_user','lineitem'
以这种方式执行时只有0.6秒左右!
5. sp_iqdbspaceobjectinfo
我的一个测试环境中(有2500张表),执行sp_iqdbspaceobjectinfo 'TPCH_USER_MAIN'或者select owner,object_name from sp_iqdbspaceobjectinfo('TPCH_USER_MAIN',NULL,NULL,'table')与上面所说的sp_iqdbspaceinfo情况类似,也比较慢。这两个方式大约都需要115秒。
建议:
与sp_iqdbspaceinfo相同!
阅读(3344) | 评论(0) | 转发(0) |