创建索引是指在某个表的一列或多列上建立一个索引,以便提高对表的访问速度。创建索引有3种方式,这3种方式分别是创建表的时候创建索引、在已经存在的表上创建索引和使用ALTER TABLE语句来创建索引。本节将详细讲解这3种创建索引的方法。
 
7.2.1  创建表的时候创建索引(1)
 
创建表时可以直接创建索引,这种方式最简单、方便。其基本形式如下:
 
CREATE TABLE  表名( 属性名 数据类型[完整性约束条件], 
属性名 数据类型[完整性约束条件], 
...... 
属性名 数据类型  
[ UNIQUE | FULLTEXT | SPATIAL ]  INDEX | KEY 
[ 别名]  ( 属性名1  [(长度)]  [ ASC | DESC] ) 
);
其中,UNIQUE是可选参数,表示索引为唯一性索引;FULLTEXT是可选参数,表示索引为全文索引;SPATIAL也是可选参数,表示索引为空间索引;INDEX和KEY参数用来指定字段为索引的,两者选择其中之一就可以了,作用是一样的;"别名"是可选参数,用来给创建的索引取的新名称;"属性1"参数指定索引对应的字段的名称,该字段必须为前面定义好的字段;"长度"是可选参数,其指索引的长度,必须是字符串类型才可以使用;"ASC"和"DESC"都是可选参数,"ASC"参数表示升序排列,"DESC"参数表示降序排列。

1.创建普通索引
 
创建一个普通索引时,不需要加任何UNIQUE、FULLTEXT或者SPATIAL参数。
 
【示例7-1】 下面创建一个表名为index1的表,在表中的id字段上建立索引。SQL代码如下:

CREATE  TABLE  index1 (id    INT ,
name   VARCHAR(20) ,
sex    BOOLEAN ,
INDEX ( id)
);

运行结果显示创建成功,使用SHOW CREATE TABLE语句查看表的结构。显示如下:

mysql> SHOW CREATE TABLE index1 \G
*************************** 1. row *************************** Table: index1
Create Table: CREATE TABLE `index1` ( `id` int(11) DEFAULT NULL, `name` varchar(20) DEFAULT NULL, `sex` tinyint(1) DEFAULT NULL, KEY `index1_id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

结果可以看到,id字段上已经建立了一个名为index1_id的索引。使用EXPLAIN语句可以查看索引是否被使用,SQL代码如下:

mysql> EXPLAIN SELECT * FROM index1 where id=1 \G
*************************** 1. row *************************** id: 1 select_type: SIMPLE table: index1 type: ref
possible_keys: index1_id key: index1_id key_len: 5 ref: const rows: 1 Extra:
1 row in set (0.00 sec)

上面结果显示,possible_keys和key处的值都为index1_id。说明index1_id索引已经存在,而且已经开始起作用。
 
2.创建唯一性索引
 
创建唯一性索引时,需要使用UNIQUE参数进行约束。
 
【示例7-2】 下面创建一个表名为index2的表,在表中的id字段上建立名为index2_id的唯一性索引,且以升序的形式排列。SQL代码如下:

CREATE  TABLE  index2 (id    INT  UNIQUE ,
name   VARCHAR(20) ,
UNIQUE  INDEX  index2_id ( id  ASC)
);

运行结果显示创建成功,使用SHOW CREATE TABLE语句查看表的结构。显示如下:

mysql> SHOW CREATE TABLE index2 \G
*************************** 1. row *************************** Table: index2
Create Table: CREATE TABLE `index2` ( `id` int(11) DEFAULT NULL, `name` varchar(20) DEFAULT NULL, UNIQUE KEY `id` (`id`), UNIQUE KEY `index2_id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

结果可以看到,id字段上已经建立了一个名为index2_id的唯一性索引。这里的id字段可以没有进行唯一性约束,也可以在该字段上成功创建唯一性索引。但是,这样可能达不到提高查询速度的目的。
 
 
3.创建全文索引
 
全文索引只能创建在CHAR、VARCHAR或TEXT类型的字段上。而且,现在只有MyISAM存储引擎支持全文索引。
 
【示例7-3】 下面创建一个表名为index3的表,在表中的info字段上建立名为index3_ info的全文索引。SQL代码如下:

CREATE  TABLE  index3 (id    INT  ,
info   VARCHAR(20) ,
FULLTEXT  INDEX  index3_info ( info )
)ENGINE=MyISAM;

运行结果显示创建成功,使用SHOW CREATE TABLE语句查看表的结构。显示如下:

mysql> SHOW CREATE TABLE index3 \G
*************************** 1. row *************************** Table: index3
Create Table: CREATE TABLE `index3` ( `id` int(11) DEFAULT NULL, `info` varchar(20) DEFAULT NULL, FULLTEXT KEY `index3_info` (`info`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

结果可以看到,info字段上已经建立了一个名为index3_info的全文索引。如果表的存储引擎不是MyISAM存储引擎,系统会提示"ERROR 1214 (HY000): The used table type doesn't support FULLTEXT indexes"。
 
注意:目前只有MyISAM存储引擎支持全文索引,InnoDB存储引擎还不支持全文索引。因此,在创建全文索引时一定注意表的存储引擎的类型。对于经常需要索引的字符串、文字数据等信息,可以考虑存储到MyISAM存储引擎的表中。
 
4.创建单列索引
 
单列索引是在表的单个字段上创建索引。
 
【示例7-4】 下面创建一个表名为index4的表,在表中的subject字段上建立名为index4_st的单列索引。SQL代码如下:

CREATE  TABLE  index4 (id    INT  ,
subject   VARCHAR(30) ,
INDEX  index4_st ( subject(10) )
);

运行结果显示创建成功,使用SHOW CREATE TABLE语句查看表的结构。显示如下:

mysql> SHOW CREATE TABLE index4 \G
*************************** 1. row *************************** Table: index4
Create Table: CREATE TABLE `index4` ( `id` int(11) DEFAULT NULL, `subject` varchar(30) DEFAULT NULL, KEY `index4_st` (`subject`(10))
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

结果可以看到,subject字段上已经建立了一个名为index4_st的单列索引。细心的读者可能会发现,subject字段长度为20,而index4_st索引的长度只有10。这样做的目的还是为了提高查询速度。对于字符型的数据,可以不用查询全部信息,而只查询其前面的若干字符信息。
 
5.创建多列索引
 
创建多列索引是在表的多个字段上创建一个索引。
 
【示例7-5】 下面创建一个表名为index5的表,在表中的name和sex字段上建立名为index5_ns的多列索引。SQL代码如下:

CREATE  TABLE  index5 (id  INT  ,
name   VARCHAR(20) ,
sex   CHAR(4) ,
INDEX  index5_ns ( name, sex )
);

运行结果显示创建成功,使用SHOW CREATE TABLE语句查看表的结构。显示如下:

mysql> SHOW CREATE TABLE index5 \G
*************************** 1. row *************************** Table: index5
Create Table: CREATE TABLE `index5` ( `id` int(11) DEFAULT NULL, `name` varchar(20) DEFAULT NULL, `sex` char(4) DEFAULT NULL, KEY `index5_ns` (`name`,`sex`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

结果可以看到,name和sex字段上已经建立了一个名为index5_ns的单列索引。多列索引中,只有查询条件中使用了这些字段中第一个字段时,索引才会被使用。用EXPLAIN语句可以查看索引的使用情况。如果只是有name字段作为查询条件进行查询,显示结果如下:

mysql> EXPLAIN select * from index5 where name='hjh' \G
*************************** 1. row *************************** id: 1 select_type: SIMPLE table: index5 type: ref
possible_keys: index5_ns key: index5_ns key_len: 83 ref: const rows: 1 Extra: Using index condition
1 row in set (0.00 sec)

结果显示,possible_keys和key的值都是index5_ns。额外信息(Extra)显示正在使用索引。这说明使用name字段进行索引时,索引index5_ns已经被使用。如果只使用sex字段作为查询条件进行查询,显示结果如下:

mysql> EXPLAIN select * from index5 where sex='n' \G
*************************** 1. row *************************** id: 1 select_type: SIMPLE table: index5 type: ALL
possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 1 Extra: Using where
1 row in set (0.00 sec)

此时的结果显示,possible_keys和key的值都为NULL。额外信息(Extra)显示正在使用Where条件查询,而未使用索引。
 
技巧:使用多列索引时一定要特别注意,只有使用了索引中的第一个字段时才会触发索引。如果没有使用索引中的第一个字段,那么这个多列索引就不会起作用。因此,在优化查询速度时,可以考虑优化多列索引。
 
6.创建空间索引
 
创建空间索引时必须使用SPATIAL参数来设置。创建空间索引时,表的存储引擎必须是MyISAM类型。而且,索引字段必须有非空约束。
 
【示例7-6】 下面创建一个表名为index6的表,在表中的space字段上建立名为index6_sp的空间索引。SQL代码如下:

CREATE  TABLE  index6 (id  INT  ,
space  GEOMETRY  NOT NULL,
SPATIAL  INDEX  index6_sp (space )
)ENGINE=MyISAM;

运行结果显示创建成功,使用SHOW CREATE TABLE语句查看表的结构。显示如下:

mysql> SHOW CREATE TABLE index6 \G
*************************** 1. row *************************** Table: index6
Create Table: CREATE TABLE `index6` ( `id` int(11) DEFAULT NULL, `space` geometry NOT NULL, SPATIAL KEY `index6_sp` (`space`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

结果可以看到,space字段上已经建立了一个名为index6_sp的空间索引。值得注意的是,space字段是非空的,而且数据类型是GEOMETRY类型。这个类型是空间数据类型。空间类型包括GEOMETRY、POINT、LINESTRING和POLYGON类型等。这些空间数据类型平时很少用到。

什 么是索引?

索 引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存。如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的 所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即 可迅速得到目标记录所在的位置。如果表有1000个记录,通过索引查找记录至少要比顺序扫描记录快100倍,个人感觉快100倍有点夸张。

假 设我们创建了一个名为people的表:

CODE:
CREATE TABLE people ( peopleid SMALLINT NOT NULL, name CHAR(50) NOT NULL );

后,我们完全随机把1000个不同name值插入到people表。
可以看到,在数据文件 中name列没有任何明确的次序。如果我们创建了name列的索引,MySQL将在索引中排序name列:
对 于索引中的每一项,MySQL在内部为它保存一个数据文件中实际记录所在位置的“指针”。因此,如果我们要查找name等于“Mike”记录的 peopleid(SQL命令为“SELECT peopleid FROM people WHERE name='Mike';”),MySQL能够在name的索引中查找“Mike”值,然后直接转到数据文件中相应的行,准确地返回该行的 peopleid(999)。在这个过程中,MySQL只需处理一个行就可以返回结果。如果没有“name”列的索引,MySQL要扫描数据文件中的所有 记录,即1000个记录!显然,需要MySQL处理的记录数量越少,则它完成任务的速度就越快。

索引的类型

MySQL提供多种索引类型供选择:

普通索引

这 是最基本的索引类型,而且它没有唯一性之类的限制。普通索引可以通过以下几种方式创建:

CODE:
创建索引,例如 CREATE INDEX <索引的名字>; ON tablename (列的列表);
修改表,例如ALTER TABLE tablename ADD INDEX [索引的名字] (列的列表);
创建表的时候指定索引,例如CREATE TABLE tablename ( [...], INDEX [索引的名字] (列的列表) );

唯一性索引

这种索引 和前面的“普通索引”基本相同,但有一个区别:索引列的所有值都只能出现一次,即必须唯一。唯一性索引可以用以下几种方式创建:

CODE:
创建索引,例如CREATE UNIQUE INDEX <索引的名字>; ON tablename (列的列表);
修改表,例如ALTER TABLE tablename ADD UNIQUE [索引的名字] (列的列表);
创建表 的时候指定索引,例如CREATE TABLE tablename ( [...], UNIQUE [索引的名字] (列的列表)
);

主 键

主 键是一种唯一性索引,但它必须指定为“PRIMARY KEY”。如果你曾经用过AUTO_INCREMENT类型的列,你可能已经熟悉主键之类的概念了。主键一般在创建表的时候指定,例如“CREATE TABLE tablename ( [...], PRIMARY KEY (列的列表) ); ”。但是,我们也可以通过修改表的方式加入主键,例如“ALTER TABLE tablename ADD PRIMARY KEY (列的列表); ”。每个表只能有一个主键。

全文索引

MySQL从3.23.23版开始支持全文索引和全文检索。在 MySQL中,全文索引的索引类型为FULLTEXT。全文索引可以在VARCHAR或者TEXT类型的列上创建。它可以通过CREATE TABLE命令创建,也可以通过ALTER TABLE或CREATE INDEX命令创建。对于大规模的数据集,通过ALTER TABLE(或者CREATE INDEX)命令创建全文索引要比把记录插入带有全文索引的空表更快。本文下面的讨论不再涉及全文索引,要了解更多信息,请参见MySQL documentation。

单列索引与多列索引

索 引可以是单列索引,也可以是多列索引。下面我们通过具体的例子来说明这两种索引的区别。假设有这样一个people表:

CODE:
CREATE TABLE people ( peopleid SMALLINT NOT NULL AUTO_INCREMENT, firstname CHAR(50)
NOT NULL, lastname CHAR(50) NOT NULL, age SMALLINT NOT NULL, townid SMALLINT NOT
NULL, PRIMARY KEY (peopleid) );

下面是我们插入到这个people表的数据:

这个数据片段中有四个名字为“Mikes”的人(其 中两个姓Sullivans,两个姓McConnells),有两个年龄为17岁的人,还有一个名字与众不同的Joe Smith。

这 个表的主要用途是根据指定的用户姓、名以及年龄返回相应的peopleid。例如,我们可能需要查找姓名为Mike Sullivan、年龄17岁用户的peopleid(SQL命令为SELECT peopleid FROM people WHERE firstname='Mike' AND lastname='Sullivan' AND age=17;)。由于我们不想让MySQL每次执行查询就去扫描整个表,这里需要考虑运用索引。

首先,我们可以考虑在单个列上创建 索引,比如firstname、lastname或者age列。如果我们创建firstname列的索引(ALTER TABLE people ADD INDEX firstname (firstname);),MySQL将通过这个索引迅速把搜索范围限制到那些firstname='Mike'的记录,然后再在这个“中间结果集”上 进行其他条件的搜索:它首先 排除那些lastname不等于“Sullivan”的记录,然后排除那些age不等于17的记录。当记录满足所有搜索条件之 后,MySQL就返回最终的搜索结果。

由于建立了firstname列的索引,与执行表的完全扫描相比,MySQL的效率提高了很 多,但我们要求MySQL扫描的记录数量仍旧远远超过了实际所需要的。虽然我们可以删除firstname列上的索引,再创建lastname或者age 列的索引,但总地看来,不论在哪个列上创建索引搜索效率仍旧相似。

为了提高搜索效率,我们需要考虑运用多列索引。如果为 firstname、lastname和age这三个列创建一个多列索引,MySQL只需一次检索就能够找出正确的结果!下面是创建这个多列索引的SQL 命令:

CODE:
ALTER TABLE people ADD INDEX fname_lname_age (firstname,lastname,age);

由于索引文件以B-树格式保存,MySQL能够立即转到合适的firstname,然后 再转到合适的lastname,最后转到合适的age。在没有扫描数据文件任何一个记录的情况下,MySQL就正确地找出了搜索的目标记录!

那 么,如果在firstname、lastname、age这三个列上分别创建单列索引,效果是否和创建一个firstname、lastname、age 的多列索引一样呢?答案是否定的,两者完全不同。当我们执行查询的时候,MySQL只能使用一个索引。如果你有三个单列的索引,MySQL会试图选择一个 限制最严格的索引。但是,即使是限制最严格的单列索引,它的限制能力也肯定远远低于firstname、lastname、age这三个列上的多列索引。

最左前缀

多列索引还有另外一个 优点,它通过称为最左前缀(Leftmost Prefixing)的概念体现出来。继续考虑前面的例子,现在我们有一个firstname、lastname、age列上的多列索引,我们称这个索引 为fname_lname_age。当搜索条件是以下各种列的组合时,MySQL将使用fname_lname_age索引:

CODE:
firstname,lastname,age
firstname,lastname
firstname

从 另一方面理解,它相当于我们创建了(firstname,lastname,age)、(firstname,lastname)以及 (firstname)这些列组合上的索引。下面这些查询都能够使用这个fname_lname_age索引:

CODE:
SELECT peopleid FROM people WHERE firstname='Mike' AND lastname='Sullivan' AND
age='17'; SELECT peopleid FROM people WHERE firstname='Mike' AND
lastname='Sullivan'; SELECT peopleid FROM people WHERE firstname='Mike'; The
following queries cannot use the index at all: SELECT peopleid FROM people WHERE
lastname='Sullivan'; SELECT peopleid FROM people WHERE age='17'; SELECT peopleid
FROM people WHERE lastname='Sullivan' AND age='17';

选择索引 列

在性能优化过程中,选择在哪些列上创建索引是最重要的步骤之一。可以考虑使用索引的主要有两种类型的 列:在WHERE子句中出现的列,在join子句中出现的列。请看下面这个查询:

CODE:
SELECT age ## 不使用索引 FROM people WHERE firstname='Mike' ## 考虑使用索引 AND
lastname='Sullivan' ## 考虑使用索引

这个查询与前面的查询略有不同,但仍属于简单查询。由于age是在SELECT部分被引用,MySQL不会用它来限制列 选择操作。因此,对于这个查询来说,创建age列的索引没有什么必要。下面是一个更复杂的例子:

CODE:
SELECT people.age, ##不使用索引 town.name ##不使用索引 FROM people LEFT JOIN town ON
people.townid=town.townid ##考虑使用索引 WHERE firstname='Mike' ##考虑使用索引 AND
lastname='Sullivan' ##考虑使用索引

与前面的例 子一样,由于firstname和lastname出现在WHERE子句中,因此这两个列仍旧有创建索引的必要。除此之外,由于town表的townid 列出现在join子句中,因此我们需要考虑创建该列的索引。

那 么,我们是否可以简单地认为应该索引WHERE子句和join子句中出现的每一个列呢?差不多如此,但并不完全。我们还必须考虑到对列进行比较的操作符类 型。MySQL只有对以下操作符才使用索引:<,<=,=,>;,>;=,BETWEEN,IN,以及某些时候的LIKE。可以 在LIKE操作中使用索引的情形是指另一个操作数不是以通配符(%或者_)开头的情形。例如,“SELECT peopleid FROM people WHERE firstname LIKE 'Mich%';”这个查询将使用索引,但“SELECT peopleid FROM people WHERE firstname LIKE '%ike';”这个查询不会使用索引。

分析索引效率

现 在我们已经知道了一些如何选择索引列的知识,但还无法判断哪一个最有效。MySQL提供了一个内建的SQL命令帮助我们完成这个任务,这就是 EXPLAIN命令。EXPLAIN命令的一般语法是:EXPLAIN <SQL命令>;。你可以在MySQL文档找到有关该命令的更多说明。下面是一个例子:

CODE:
EXPLAIN SELECT peopleid FROM people WHERE firstname='Mike' AND lastname='Sullivan'
AND age='17';

这个命令将返回下面这种分析结果:

table      type    possible_keys          key                         key_len       ref                          rows     Extra
people   ref       fname_lname_age   fname_lname_age  102 const,const,const  1           Where used

下面我们就来看看这个EXPLAIN分析结果的含义。

table:这是表的名字。

type: 连接操作的类型。下面是MySQL文档关于ref连接类型的说明:

“对 于每一种与另一个表中记录的组合,MySQL将从当前的表读取所有带有匹配索引值的记录。如果连接操作只使用键的最左前缀,或者如果键不是UNIQUE或 PRIMARY KEY类型(换句话说,如果连接操作不能根据键值选择出唯一行),则MySQL使用ref连接类型。如果连接操作所用的键只匹配少量的记录,则ref是一 种好的连接类型。”

在本例中,由于索引不是UNIQUE类型,ref是我们能够得到的最好连接类型。

如果EXPLAIN 显示连接类型是“ALL”,而且你并不想从表里面选择出大多数记录,那么MySQL的操作效率将非常低,因为它要扫描整个表。你可以加入更多的索引来解决 这个问题。预知更多信息,请参见MySQL的手册说明。

possible_keys:

可能可以利用的索引的名字。这里的 索引名字是创建索引时指定的索引昵称;如果索引没有昵称,则默认显示的是索引中第一个列的名字(在本例中,它是“firstname”)。默认索引名字的 含义往往不是很明显。

Key:

它显示了MySQL实际使用的索引的名字。如果它为空(或NULL),则MySQL不使用 索引。

key_len:

索引中被使用部分的长度,以字节计。在本例中,key_len是102,其中firstname 占50字节,lastname占50字节,age占2字节。如果MySQL只使用索引中的firstname部分,则key_len将是50。

ref:

它 显示的是列的名字(或单词“const”),MySQL将根据这些列来选择行。在本例中,MySQL根据三个常量选择行。

rows:

MySQL 所认为的它在找到正确的结果之前必须扫描的记录数。显然,这里最理想的数字就是1。

Extra:

这里可能出现许多不同的 选项,其中大多数将对查询产生负面影响。在本例中,MySQL只是提醒我们它将用WHERE子句限制搜索结果集。

创建表的时候创建索引相关推荐

  1. Oracle 数据库创建表空间、创建用户指定表空间

    Oracle 数据库创建表空间.创建用户指定表空间 //创建临时表空间 create temporary tablespace user_temp tempfile 'D:\oracle\oradat ...

  2. Oracle创建表空间、创建用户以及授权

    原文地址:Oracle创建表空间.创建用户以及授权 作者:chinacoolsword Oracle安装完后,其中有一个缺省的数据库,除了这个缺省的数据库外,我们还可以创建自己的数据库. 对于初学者来 ...

  3. Oracle 创建表空间,创建表、数据增删改

    Oracle 创建表空间,创建表.数据增删改 创建表空间 创建用户 用户授权 表的创建.修改与删除 创建表 数据类型 创建表的同时指定表空间 修改表 删除表 数据增删改 插入数据 修改数据 删除数据 ...

  4. oracle12c创建表空间、创建用户、创建权限

    目录 1.基本概念 1.1.关于账号的概念 1.2.关于pdb和cdb的概念 3.创建用户 4.给用户创建权限 5.综合练习(很重要.正在写...) 6.参考资料 1.基本概念 1.1.关于账号的概念 ...

  5. Oracle之创建表、序列、索引和视图

    本文主要包括:  · 创建.修改和删除表  · 如何创建并使用序列:序列可以生成一系列数字 · 如何创建并使用索引:索引可以提高查询的性能  · 如何创建并使用视图:视图是预定义的查询  · 闪回数据 ...

  6. oracle 创建表空间_Oracle 创建和管理表

    (1)创建表 - CREATE TABLE ① Create table 创建表 准备条件:具备创建表的权限和存储空间:制定表名,列名,数据类型,尺寸 create table 语句 必须具备:cre ...

  7. 创建表空间和创建表过程分析

    一.创建表空间 1:创建临时表空间create temporary tablespace user_temp tempfile 'Q:\oracle\product\10.2.0\oradata\Te ...

  8. Oracle11g创建表空间、创建用户、角色授权、导入导出表以及中文字符乱码问题

    本文转自:https://www.cnblogs.com/bjh1117/p/6605037.html, 侵删. 前提:本机已经安装了Oracle11g数据库 需求:使用PL SQL数据库连接工具操作 ...

  9. 创建表 编码_创建没有编码的专业商业网站

    创建表 编码 Do you have a great idea for an online business, but lack the technical skills to build a web ...

最新文章

  1. [Asp.net mvc]OutputCacheAttribute
  2. 【Android RTMP】RTMPDump 推流过程 ( 独立线程推流 | 创建推流器 | 初始化操作 | 设置推流地址 | 启用写出 | 连接 RTMP 服务器 | 发送 RTMP 数据包 )
  3. 面试题热个身:5 亿整数的大文件,来排个序?
  4. android手机没电怎么恢复电量,手机电池不耐用怎么恢复_华为手机电池不耐用怎么恢复_攻略...
  5. Python 中引入多个模块,包的概念
  6. android Q gradle配置,【Android】Android Studio启动配置gradle
  7. 网络技巧:分享几个路由器设置小技巧,总有用得到的一天!
  8. DBA一族九阳神功秘籍
  9. 阶段3 2.Spring_04.Spring的常用注解_1 今日课程内容介绍
  10. Myeclipse8.5 最新注册码以使用方法(可以用到2015年!!!)
  11. 获得当月时间chuo_擅用GTD时间管理法,远离焦虑情绪,让你的工作、学习井然有序...
  12. 设计系统测试用例时应考虑的类型
  13. HTML5颜色选择器(画布)
  14. 我的游戏测试面试过程
  15. vagrant入门_在Vagrant上使用PHP入门的5种简单方法
  16. 解释程序与编译程序的区别
  17. Kaggle数据集之电信客户流失数据分析
  18. 普通socket服务端
  19. 【太美了】【Crystal Castle.水晶城堡】【严泽远作品】
  20. 独身主义也不赖:选择不结婚究竟是选择了什么?

热门文章

  1. 特殊符号(五笔输入)
  2. ajax(面试重点)
  3. 软子空间聚类_自适应的软子空间聚类算法
  4. 搞懂时钟管理,看这个就好啦~
  5. 百家号企业蓝V怎么认证
  6. 游戏性计算机配置说明,从零教你查询游戏电脑配置
  7. java中runnable_Java之Runnable表达式的简单介绍
  8. Linux的kern日志和demsg,Linux dmesg
  9. swt/jface控件的隐藏与显示
  10. java标签库 taglib pdf格式_JSP系列教材 (十)- JSTL Java Standard Tag Library 标准标签库...