日期:2014-05-16  浏览次数:20493 次

软件开发-理论性知识(一)

已经在公司做开发2年多了,做了很多个项目,写过oracle、mysql的函数、存储过程、触发器、定时器等代码的编写,写过使用spring、hibernate、rest等JAVA技术后台的开发,同时使用过easyui、extjs、dojo的前台JS页面的开发和android软件的研发,做了很多个项目,发现自己在软件开发理论上欠缺挺多的,以后的几篇文章将会做一个温习的记录,方便以后查看。

当前预备温习的内容大体如下:

1.数据库内容

2.数据结构、算法涉及内容

3.操作系统涉及内容(主要是进程、线程相关内容)


一、数据库索引

1.索引通常使用B树及其变种B+树来保存索引记录。

2.索引包括唯一索引、主键索引、聚集索引、非聚集索引。

 唯一索引:不允许任何两行具有相同索引值的索引。

 主键索引:是唯一索引的特定类型,关系型数据库为表定义主键将自动创建主键索引。

 聚集索引:表中行的物理顺序与键值的逻辑顺序相同。一个表只能包含一个聚集索引。

 非聚集索引:表中行的物理顺序与键值的逻辑顺序可以不相同。

3.需要创建索引的列的情况:

1)经常需要搜索的列

2)作为主键的列

3)经常用在连接的列(一般为外键列,加快连接速度)

4)经常根据范围搜索的列

5)经常需要排序的列

4.不应该创建索引的列的情况

1)查询中很少使用到的列

2)只有很少数据值的列(原因:比如性别列,结构集的数据行占了表中数据行的很大比例,需要在表中搜索数据行的比例很大,添加索引后,并不会明显加快检索速度)

3)定义为text、blob、image、bit数据类型的列不应该增加索引

4)当修改性能远大于检索性能时,不应该创建索引

5 索引优点: 

第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 
第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。 
第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。 
第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。 
第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。 

6 索引不足:

第一,创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。 
第二,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。 
第三,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。 

7.索引的创建语法

CREATE UNIUQE | BITMAP INDEX <schema>.<index_name>

ON <schema>.<table_name>

(<column_name> | <expression> ASC | DESC,

            <column_name> | <expression> ASC | DESC,...)

     TABLESPACE <tablespace_name>

     STORAGE <storage_settings>

     LOGGING | NOLOGGING

    COMPUTE STATISTICS

     NOCOMPRESS | COMPRESS<nn>

     NOSORT | REVERSE

     PARTITION | GLOBAL PARTITION<partition_setting>

相关说明

1)UNIQUE | BITMAP:指定UNIQUE为唯一值索引,BITMAP为位图索引,省略为B-Tree索引。

2)<column_name> | <expression> ASC | DESC:可以对多列进行联合索引,当为expression时即“基于函数的索引”

3)TABLESPACE:指定存放索引的表空间(索引和原表不在一个表空间时效率更高)

4)STORAGE:可进一步设置表空间的存储参数

5)LOGGING | NOLOGGING:是否对索引产生重做日志(对大表尽量使用NOLOGGING来减少占用空间并提高效率)

6)COMPUTE STATISTICS:创建新索引时收集统计信息

7)NOCOMPRESS | COMPRESS<nn>:是否使用“键压缩”(使用键压缩可以删除一个键列中出现的重复值)

8)NOSORT | REVERSE:NOSORT表示与表中相同的顺序创建索引,REVERSE表示相反顺序存储索引值

9)PARTITION | NOPARTITION:可以在分区表和未分区表上对创建的索引进行分区

8.Oracle索引类型

1)B*索引 (唯一索引、组合索引、省略为B-Tree索引)

a)创建唯一索引:

CREATE unique INDEX 索引名 ON 表名 (列名)

TABLESPACE 表空间名;

b)创建组合索引:

CREATE INDEX 索引名 ON 表名 (列名1,列名2)

TABLESPACE 表空间名;

c)创建反向键索引:

CREATE INDEX 索引名 ON 表名 (列名) reverse

TABLESPACE 表空间名;

2)位图索引

3)基于函数的索引

4)应用域索引

5)HASH索引

6)索引组织表索引

9.MySQL索引类型

1)普通索引

最基本的索引,SQL创建、修改、删除方式:

CREATE INDEX  indexName ON tableName(colName(length));如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length.

ALTER tableName ADD INDEX [indexName] ON (colName(length));

DROP INDEX [indexName] ON tableName;

2)唯一索引

索引列的值必须唯一,但允许有空值,如果是组合索引,则列值的组合必须唯一

3)主键索引

特殊的唯一索引,不允许有空值,在指定表主键的时候创建

4)组合索引

示例:
CREATE TABLE mytable(ID INT NOT NULL, username VARCHAR(16) NOT NULL, city VARCHAR(50) NOT NULL, age INT NOT NULL  );  
为了进一步榨取MySQL的效率,就要