发表于: 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环境


遇到问题:对于索引的分类不是特别明白,似乎当存储引擎不同时索引又不太一样


返回列表 返回列表
评论

    分享到