发表于: 2018-03-09 23:20:53
4 453
今日完成的事:
1.认识索引
(1)索引是什么
索引用来快速地寻找那些具有特定值的记录,如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置。
索引实质是数据结构,其作用类似书本中的目录。
(2)索引的种类
普通索引(INDEX):最基本的索引类型,没有唯一性的限制,普通索引可以通过以下方式创建
创建索引,CREATE INDEX index_name ON table_name (column(length));
修改表, ALTER TABLE table_name ADD INDEX [index_name] (column);
创建表时指定索引, CREATE TABLE table_name(ID INT NOT NULL,username VARCHAR9160 NOT NULL, INDEX[indexName](username(length)));
删除索引,DROP INDEX indexName ON tableName;
唯一索引(UNIQUE):索引列的值必须唯一,但允许有空值。
创建索引,CREATE UNIQUE INDEX index_name ON table_name(column(length));
修改表,ALTER table_name ADD UNIQUE [index_name] ON (column(length));
主键索引(PRIMARY KEY): 主键索引是一种唯一性索引,一般在创建表时指定每个表只能有一个主键,不允许有空值。
创建索引,CREAT TABLE table_name(ID INT NOT NULL AUTO_INCREMENT, 'title' char(255) NOT NULL, PRIMARY KEY(ID));
全文索引(FULLTEXT):用来查找文本中的关键字,而不是直接与索引中的值相比较,与上面三种索引相比,它更像是一个搜索引擎,而不是见到的where语句的参数匹配,目前只有字段值类型为char、varchar、text的列上可以创建全文索引。
创建表时创建索引,CREATE TABLE table_name('ID' INT NOT NULL AUTO_INCREMENT, 'title' CHAR(255) CHARACTER NOT NULL, 'content' TEXT CHARATER NULL, 'time' INT(10) NULL DEEAULT NULL, PRIMARY KEY ('ID'), FULLTEXT('content'));
修改表结构添加索引 ,ATLER TABLE article ADD FULLTEXT index_content(content);
直接创建索引,CREATE FULLTEXT INDEX index_content ON article(content);
组合索引:指在多个字段上创建索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用,使用组合索引时遵循最左前缀集合
修改表,ALTER TABLE table_name ADD INDEX name_city_age(name,city,age);
(3)索引优缺点
建立索引能提高数据检索效率,但索引也是一张表,当对数据进行更新时,索引也要跟着更新,此时会影响表更新的效率;建立索引会占用磁盘空间,当在大表上建立组合索引时,索引文件会增长很快。
2.比较有无索引检索效率(总数据量3.9万条)
(1)无索引时
建立普通索引后
建立唯一索引后
结论:有索引确实比无索引效率高
明天计划:
配置好Java环境和maven环境
遇到问题:对于索引的分类不是特别明白,似乎当存储引擎不同时索引又不太一样
评论