ORACLE索引介绍与高性能SQL优化
什么是索引
索引是建立在表的一列或多个列上的辅助对象,目的是加快访问表中的数据;
Oracle存储索引的数据结构是B*树,位图索引也是如此,只不过是叶子节点不同B*数索引;
索引由根节点、分支节点和叶子节点组成,上级索引块包含下级索引块的索引数据,叶节点包含索引数据和确定行实际位置的rowid。
使用索引的目的
加快查询速度
减少I/O操作
消除磁盘排序
何时使用索引
查询返回的记录数
排序表<40%
非排序表 <7%
表的碎片较多(频繁增加、删除)
索引的种类
非唯一索引(最常用)
唯一索引
位图索引
局部有前缀分区索引
局部无前缀分区索引
全局有前缀分区索引
散列分区索引
基于函数的索引
管理索引的准则
在表中插入数据后创建索引 。在用SQL*Loader或import工具插入或装载数据后,建立索引比较有效;
索引正确的表和列
。经常检索排序大表中40%或非排序表7%的行,建议建索引;
。为了改善多表关联,索引列用于联结;
。列中的值相对比较唯一;
。取值范围(大:B*树索引,小:位图索引);
。Date型列一般适合基于函数的索引;
。列中有许多空值,不适合建立索引
为性能而安排索引列
。经常一起使用多个字段检索记录,组合索引比单索引更有效;
。把最常用的列放在最前面,例:dx_groupid_serv_id(groupid,serv_id),在where条件中使用groupid或groupid,serv_id,查询将使用索引,若仅用到serv_id字段,则索引无效;
。合并/拆分不必要的索引。
限制每个表索引的数量
。一个表可以有几百个索引(你会这样做吗?),但是对于频繁插入和更新表,索引越多系统CPU,I/O负担就越重;
。建议每张表不超过5个索引。
删除不再需要的索引
。索引无效,集中表现在该使用基于函数的索引或位图索引,而使用了B*树索引;
。应用中的查询不使用索引;
。重建索引之前必须先删除索引,若用alter index … rebuild重建索引,则不必删除索引。
索引数据块空间使用
。创建索引时指定表空间,特别是在建立主键时,应明确指定表空间;
。合理设定pctfress,注意:不能给索引指定pc
相关文档:
1、启用远程连接
开始——所有程序——Microsoft SQL Server 2008——配置工具——SQL Server配置管理器
SQL Server NetWork Configuration中选择协议,"Named pipes"和"TCP/IP"都选择Enable,然后点击"TCP/IP"选属性,IP Address 选项卡,将所有的 TCP动态端口 的0全部去掉,在 ......
delete 删除一张大表时空间不释放,非常慢是因为占用大量的系统资源,支持回退操作,空间还被这张表占用着。
truncate table 表名 (删除表中记录时释放表空间)
DML 语句:
表级共享锁: 对于操作一张表中的不同记录时,互不影响
行级排它锁:对于一行记录,oracle 会只允许只有一个用户对它在同一时间进行修改操作 ......
'保存数据
Private Sub Save()
Try
If MsgBox("确定要保存所修改的数据吗?", MsgBoxStyle.Question Or MsgBoxStyle.DefaultButton2 Or MsgBoxStyle.YesNo, "系统提示") = Ms ......
SQL Server 加载驱动和url的语句则为
驱动包为com.microsoft.sqlserver.jdbc.SQLServerDriver
String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
String dbURL = "jdbc:sqlserver://localhost:1433; DatabaseName=sample";
驱动包为com.microsoft.jdbc.sqlserver.SQLServerDriver时
String driver ......