日期:2014-05-16 浏览次数:20493 次
已经在公司做开发2年多了,做了很多个项目,写过oracle、mysql的函数、存储过程、触发器、定时器等代码的编写,写过使用spring、hibernate、rest等JAVA技术后台的开发,同时使用过easyui、extjs、dojo的前台JS页面的开发和android软件的研发,做了很多个项目,发现自己在软件开发理论上欠缺挺多的,以后的几篇文章将会做一个温习的记录,方便以后查看。
当前预备温习的内容大体如下:
1.数据库内容
2.数据结构、算法涉及内容
3.操作系统涉及内容(主要是进程、线程相关内容)
1.索引通常使用B树及其变种B+树来保存索引记录。
2.索引包括唯一索引、主键索引、聚集索引、非聚集索引。
唯一索引:不允许任何两行具有相同索引值的索引。
主键索引:是唯一索引的特定类型,关系型数据库为表定义主键将自动创建主键索引。
聚集索引:表中行的物理顺序与键值的逻辑顺序相同。一个表只能包含一个聚集索引。
非聚集索引:表中行的物理顺序与键值的逻辑顺序可以不相同。
1)经常需要搜索的列
2)作为主键的列
3)经常用在连接的列(一般为外键列,加快连接速度)
4)经常根据范围搜索的列
5)经常需要排序的列
1)查询中很少使用到的列
2)只有很少数据值的列(原因:比如性别列,结构集的数据行占了表中数据行的很大比例,需要在表中搜索数据行的比例很大,添加索引后,并不会明显加快检索速度)
3)定义为text、blob、image、bit数据类型的列不应该增加索引
4)当修改性能远大于检索性能时,不应该创建索引
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:可以在分区表和未分区表上对创建的索引进行分区
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)索引组织表索引
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的效率,就要