1.索引的特点

索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。

2.索引的优点

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

3.索引的缺点

也许会有人要问:增加索引有如此多的优点,为什么不对表中的每一个列创建一个索引呢?这种想法固然有其合理性,然而也有其片面性。虽然,索引有许多优点,但是,为表中的每一个列都增加索引,是非常不明智的。这是因为,增加索引也有许多不利的一个方面。

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

4.创建索引的准则(应该在哪些列上创建索引)

第一,   在经常需要搜索的列上,可以加快搜索的速度;
第二,   在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;
第三,   在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;
第四,   在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;
第五,   在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;
第六,   在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。

5.不应该在哪些列上创建索引

第一,   对于那些在查询中很少使用或者参考的列不应该创建索引

第二,    对于那些只有很少数据值的列也不应该增加索引

第三,    对于那些定义为text, image和bit数据类型的列不应该增加索引

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

6.通过代码比较有无索引的不同

例:创建一个student的数据表向里面插入1000000条数据

DELIMITER //

create procedure proc3()

begin

declare var int default 1;

while var <=1000000

do insert student values (null,'王尼玛',18);

set var = var +1;

end while;

end //

DELIMITER ;

call proc3();

//把第1276条数据的姓名改为‘张全蛋’;

;

7.创建索引

create index index_name on student(name);

//id和name字段都有索引之后,查询速度相当

8.创建主键索引的3种方式

方式-:

create  table student (

id INT NOT NULL,

name VARCHAR(16)NOT NULL,

PRIMARY KEY (id)

);

方式二:

CREATE INDEX index_name ON student (name);

方式三:

ALTER  student ADD PRIMARY  KEY [indexName]ON (id);

9.普通索引

这是最基本的mysql 数据索引

它没有任何限制

它有以下几种创建方式:

9.1创建索引

create index index_name ON  tableName(name[length]);

注意: 如果是CHAR ,VARCHAR 类型,length可以小于字段实际长度;如果是BLOB 和TEXT 类型,必须指定length相同;

9.2修改表结构体

ALTER tableName ADD INDEX [indexName]ON (name);

9.3创建表的时候直接指定

CREATE  TABLE tableName(

id INT NOT NULL,

name VARCHAR(16) NOT NULL,

INDEX [index_name](name[length])

);

10.唯一索引

他与前面的普通索引类是,不同就是:

mysql 数据库索引列的值必须唯一,但允许有空值。

如果是组合索引,则列值的组合必须唯一。

10.1创建索引

create  UNIQUE index index_name ON  tableName(name[length]);

10.2修改表结构体

ALTER tableName ADD UNIQUE    [indexName]ON (name);

10.3创建表的时候直接指定

CREATE  TABLE tableName(

id INT NOT NULL,

name VARCHAR(16) NOT NULL,

UNIQUE[index_name](name[length])

);

11.全文索引(MyISAM 引擎下才能使用)需要先修改引擎

//修改mysql引擎

CREATE  TABLE tableName(

id INT(11) NOT NULL,

name VARCHAR(16) DEFAULT NULL,

PRIMARY KEY(id)

)ENGINE=MyISAM;

例: 给name创建全文索引

CREATE FULLTEXT INDEX indexName ON tableName(name[length]);

12.删除索引的语法

方式一:

ALTER TABLE 表名 DROP INDEX 索引名;

方式二:

DROP INDEX [索引名]ON 表名;

13.查看数据表中的索引方法

show index from student;

14.组合索引

CREATE TABLE mytable(
id INT NOT NULL,
name VARCHAR(16) NOT NULL,
city VARCHAR(50) NOT NULL,
age INT NOT NULL
);

-- 为了进一步榨取 MySQL 的效率,就要考虑建立组合索引。就是将 name, city, age建到一个索引里:

ALTER TABLE mytable ADD INDEX name_city_age (name(10),city,age);

建表时,name 16,这里用 10。
这是因为一般情况下名字的长度不会超过10,
这样会加速索引查询速度,
还会减少索引文件的大小,
提高INSERT的更新速度。

如果分别在 name,city,age上建立单列索引,
让该表有3个单列索引,
查询时和上述的组合索引效率也会大不一样,
远远低于我们的组合索引。
虽然此时有了三个索引,
但MySQL只能用到其中的那个它认为似乎是最有效率的单列索引。

15. mysql中的引擎有

ISAM 、 MyISAM、 HEAP(也称为MEMORY)、  BLACKHOLE(黑洞引擎)、 InnoDB

mysql 索引 和mysql 的引擎的更多相关文章

  1. mysql索引总结----mysql 索引类型以及创建

    文章归属:http://feiyan.info/16.html,我想自己去写了,但是发现此君总结的非常详细.直接搬过来了 关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基 ...

  2. ***mysql索引总结----mysql索引类型以及创建

    文章归属:http://feiyan.info/16.html,我想自己去写了,但是发现此君总结的非常详细.直接搬过来了 关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基 ...

  3. MySQL索引,MySQL中索引的限制?

    MySQL中索引的限制: 1.MyISAM存储引擎引键的长度综合不能超过1000字节: 2.BLOB和TEXT类型的列只能创建前缀索引: 3.MySQL目前不支持函数索引: 4.使用!= 或者< ...

  4. 图解MySQL索引(上)—MySQL有中“8种”索引?

    关于MySQL索引相关的内容,一直是一个让人头疼的问题,尤其是对于初学者来说.笔者曾在很长一段时间内深陷其中,无法分清"覆盖索引,辅助索引,唯一索引,Hash索引,B-Tree索引--&qu ...

  5. Mysql数据库知识-Mysql索引总结 mysql mysql数据库 mysql函数

    mysql数据库知识-Mysql索引总结: 索引(Index)是帮助MySQL高效获取数据的数据结构. 下边是自己整理的资料与自己的学习总结,,做一个汇总. 一.真的有必要使用索引吗? 不是每一个性能 ...

  6. MySQL索引,MySQL性能分析及explain的使用,分析SQL查询性能

    可以使用explain来分析MySQL查询性能,举例如下: 1.使用explain语句去查看分析结果 如 explain select * from test1 where id=1; 会出现: id ...

  7. mysql索引的一些知识

    一.MySQL索引类型 mysql里目前只支持4种索引分别是:full-text,b-tree,hash,r-tree b-tree索引应该是mysql里最广泛的索引的了,除了archive基本所有的 ...

  8. MySQL 索引优化 btree hash rtree

    一.MySQL索引类型 mysql里目前只支持4种索引分别是:full-text,b-tree,hash,r-tree b-tree索引应该是mysql里最广泛的索引的了,除了archive基本所有的 ...

  9. mysql索引总结(转)

    mysql索引总结----mysql 索引类型以及创建 文章归属:http://feiyan.info/16.html,我想自己去写了,但是发现此君总结的非常详细.直接搬过来了 关于MySQL索引的好 ...

随机推荐

  1. 自测之Lesson11:消息和消息队列

    题目:key及ftok函数的作用. 解答: key是用来创建消息队列的一个参数,当两个key相同时,创建消息队列会引起“误会”(除非有意为之).所以我们可以通过ftok函数来获得一个“不易重复”的ke ...

  2. 2017-2018-2 20172314 『Java程序设计』课程 结对编程练习_四则运算

    相关过程截图 截图为我负责的部分关于计算的测试 关键代码解释 根据代码中的部分解释,这部分代码实现了结果的整数和分数的输出,如果算出的结果为一个真分数,就输出真分数的形式,如果结果为整数,就输出整数形 ...

  3. OSG学习:位置变换节点示例

    osg::PositionAttitudeTransform节点. #include <osgViewer\Viewer> #include <osg\Node> #inclu ...

  4. Windows 7中安装Solr7

    最新忙里偷闲,研究一下了Lucene.Net,发现操作比较繁琐,同比相似的功能,感觉Solr比较简单,容易使用.不过由于Solr使用的是Java的环境,对于.Net开发的人员来说,还是比较陌生,搭配环 ...

  5. thinkphp5学习记录一

    1 使用composer安装 composer create-project topthink/think=5.0.* tpblog --prefer-dist 2 配置环境vim /usr/loca ...

  6. linux下清空文件全部内容,如log日志

    在实际操作中经常需要清空log文件, 比如a.log,   有的人说, 直接删除不就行了, 但是, 直接删除后, 没法使用tail -f a.log了. 有的人说, 先rm再touch一个新文件不就可 ...

  7. Bootstrap 折叠(collapse) 初见

    以下代码来自bootstrap中文网 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta c ...

  8. img 和 background-image 优劣比较

    一. 简单来说,img是内容部分的东西,css的background-image是修饰性的东西. img------从页面元素来说,如果是页面中的图片是作为内容出现的,比如广告图片,比如产品图片,那么 ...

  9. 【题解】CF#280 C-Game on Tree

    感觉对期望也一无所知……(:′⌒`)╮(╯﹏╰)╭ 一直在考虑怎么dp,最后看了题解——竟然是这样的???[震惊]但是看了题解之后,觉得确实很有道理…… 我们可以考虑最后答案的组成,可以分开计算不同的 ...

  10. [SHOI2012]回家的路 最短路

    ---题面--- 题解: 吐槽:找了好久的错,换了n种方法,重构一次代码,,,, 最后发现,,, 数组开小了,其实一开始尝试开大了数组,但唯独没有尝试开大手写队列的数组.... 思路: 有两种方法,这 ...