MySql 索引

本文为转载内容,原文地址:https://www.cnblogs.com/whgk/p/6179612.html
一、什么是索引?为什么要建立索引?

  索引用于快速找出在某个列中有一特定值的行,不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的时间就越多,如果表中查询的列有一个索引,MySQL能够快速到达一个位置去搜索数据文件,而不必查看所有数据,那么将会节省很大一部分时间。

 例如:有一张person表,其中有2W条记录,记录着2W个人的信息。有一个Phone的字段记录每个人的电话号码,现在想要查询出电话号码为xxxx的人的信息。

 如果没有索引,那么将从表中第一条记录一条条往下遍历,直到找到该条信息为止。
 
二、MySQL中索引的优点和缺点和使用原则

  优点:

  2、所有的MySql列类型(字段类型)都可以被索引,也就是可以给任意字段设置索引

  3、大大加快数据的查询速度

  缺点:

  1、创建索引和维护索引要耗费时间,并且随着数据量的增加所耗费的时间也会增加

  2、索引也需要占空间,我们知道数据表中的数据也会有最大上线设置的,如果我们有大量的索引,索引文件可能会比数据文件更快达到上线值

  3、当对表中的数据进行增加、删除、修改时,索引也需要动态的维护,降低了数据的维护速度。

  使用原则:

  通过上面说的优点和缺点,我们应该可以知道,并不是每个字段度设置索引就好,也不是索引越多越好,而是需要自己合理的使用。

  1、对经常更新的表就避免对其进行过多的索引,对经常用于查询的字段应该创建索引,

  2、数据量小的表最好不要使用索引,因为由于数据较少,可能查询全部数据花费的时间比遍历索引的时间还要短,索引就可能不会产生优化效果。

3、在一同值少的列上(字段上)不要建立索引,比如在学生表的"性别"字段上只有男,女两个不同值。相反的,在一个字段上不同值较多可是建立索引。

三、索引的分类  

       注意:索引是在存储引擎中实现的,也就是说不同的存储引擎,会使用不同的索引

            MyISAM和InnoDB存储引擎:只支持BTREE索引, 也就是说默认使用BTREE,不能够更换

            MEMORY/HEAP存储引擎:支持HASH和BTREE索引

       1、索引我们分为四类来讲 单列索引(普通索引,唯一索引,主键索引)、组合索引、全文索引、空间索引、

          1.1、单列索引:一个索引只包含单个列,但一个表中可以有多个单列索引。 这里不要搞混淆了。

             1.1.1、普通索引:

                  MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值,纯粹为了查询数据更快一点。

             1.1.2、唯一索引:

                  索引列中的值必须是唯一的,但是允许为空值,

             1.1.3、主键索引:

                  是一种特殊的唯一索引,不允许有空值。

          1.2、组合索引

               在表中的多个字段组合上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用,使用组合索引时遵循最左前缀集合。这个如果还不明白,等后面举例讲解时在细说 

          1.3、全文索引

               全文索引,只有在MyISAM引擎上才能使用,只能在CHAR,VARCHAR,TEXT类型字段上使用全文索引,介绍了要求,说说什么是全文索引,就是在一堆文字中,通过其中的某个关键字等,就能找到该字段所属的记录行,比如有”你是个大煞笔,二货 …” 通过大煞笔,可能就可以找到该条记录。这里说的是可能,因为全文索引的使用涉及了很多细节,我们只需要知道这个大概意思,如果感兴趣进一步深入使用它,那么看下面测试该索引时,会给出一个博文,供大家参考。

1.4、空间索引

注意:索引是在存储引擎中实现的,也就是说不同的存储引擎,会使用不同的索引

  MyISAM和InnoDB存储引擎:只支持BTREE索引, 也就是说默认使用BTREE,不能够更换

  MEMORY/HEAP存储引擎:支持HASH和BTREE索引

1、索引我们分为四类来讲 单列索引(普通索引,唯一索引,主键索引)、组合索引、全文索引、空间索引、

   1.1、单列索引:一个索引只包含单个列,但一个表中可以有多个单列索引。 这里不要搞混淆了。

     1.1.1、普通索引:

     MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值,纯粹为了查询数据更快一点。

     1.1.2、唯一索引:

     索引列中的值必须是唯一的,但是允许为空值,

     1.1.3、主键索引:

     是一种特殊的唯一索引,不允许有空值。
    
1.2、组合索引
在表中的多个字段组合上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用,使用组合索引时遵循最左前缀集合。这个如果还不明白,等后面举例讲解时在细说 

  1.3、全文索引

    全文索引,只有在MyISAM引擎上才能使用,只能在CHAR,VARCHAR,TEXT类型字段上使用全文索引,介绍了要求,说说什么是全文索引,就是在一堆文字中,通过其中的某个关键字等,就能找到该字段所属的记录行,比如有”你是个大煞笔,二货 …” 通过大煞笔,可能就可以找到该条记录。这里说的是可能,因为全文索引的使用涉及了很多细节,我们只需要知道这个大概意思,如果感兴趣进一步深入使用它
    
  1.4、空间索引

    空间索引是对空间数据类型的字段建立的索引,MySQL中的空间数据类型有四种,GEOMETRY、POINT、LINESTRING、POLYGON。

   在创建空间索引时,使用SPATIAL关键字。

   要求,引擎为MyISAM,创建空间索引的列,必须将其声明为NOT NULL
   
四、索引操作(创建和删除)
4.1、创建索引

    4.1.1、创建表的时候创建索引

    格式:CREATE TABLE 表名[字段名 数据类型]  [UNIQUE|FULLTEXT|SPATIAL|...]
    [INDEX|KEY] [索引名字] (字段名[length])   [ASC|DESC]
    CREATE TABLE book
    (
        bookid INT NOT NULL,
        info VARCHAR(255) NULL,
        year_publication YEAR NOT NULL, 
        INDEX  Index(year_publication) 
    ); 

 4.1.1.2、创建唯一索引  

   CREATE TABLE t1

   (

     id INT NOT NULL,

     name CHAR(30) NOT NULL,

     UNIQUE INDEX UniqIdx(id)

  );  

  解释:对id字段使用了索引,并且索引名字为UniqIdx。

  SHOW CREATE TABLE t1;
  EXPLAIN SELECT * FROM t1 WHERE id = 1;

4.1.1.3、创建主键索引

  CREATE TABLE t2

  (

   id INT NOT NULL,

   name CHAR(10),

   PRIMARY KEY(id)

 );  

 INSERT INTO t2 VALUES(1,’QQQ’);

EXPLAIN SELECT * FROM t2 WHERE id = 1

  4.1.1.4、创建单列索引 

   这个其实就不用在说了,前面几个就是单列索引。

 4.1.1.5、创建组合索引

   组合索引就是在多个字段上创建一个索引

   创建一个表t3,在表中的id、name和age字段上建立组合索引

   CREATE TABLE t3

   (

     id INT NOT NULL,

    name CHAR(30) NOT NULL,

    age INT NOT NULL,

    info VARCHAR(255),

    INDEX MultiIdx(id,name,age)

  );

 解释最左前缀
 组合索引就是遵从了最左前缀,利用索引中最左边的列集来匹配行,这样的列集称为最左前缀,不明白没关系,举几个例子就明白了,例如,这里由id、name和age3个字段构成的索引,索引行中就按id/name/age的顺序存放,索引可以索引下面字段组合(id,name,age)、(id,name)或者(id)。如果要查询的字段不构成索引最左面的前缀,那么就不会是用索引,比如,age或者(name,age)组合就不会使用索引查询
 查询id和name字段
 EXPLAIN SELECT * FROM t3 WHERE id = 1 AND name = ‘joe’
 
 查询(age,name)字段,这样就不会使用索引查询。来看看结果
 EXPLAIN SELECT * FROM t3 WHERE age = 3 AND name = ‘bob

4.1.1.6、创建全文索引

全文索引可以用于全文搜索,但只有MyISAM存储引擎支持FULLTEXT索引,并且只为CHAR、 VARCHAR和TEXT列服务。索引总是对整个列进行,不支持前缀索引,

CREATE TABLE t4

(

  id INT NOT NULL,

  name CHAR(30) NOT NULL,

  age INT NOT NULL,

  info VARCHAR(255),

  FULLTEXT INDEX FullTxtIdx(info)
) ENGINE=MyISAM;

使用一下什么叫做全文搜索。就是在很多文字中,通过关键字就能够找到该记录
INSERT INTO t4 VALUES(8,’AAA’,3,’text is so good,hei,my name is bob’),(9,’BBB’,4,’my name is gorlr’);

 SELECT * FROM t4 WHERE MATCH(info) AGAINST(‘gorlr’);
 注意:在使用全文搜索时,需要借助MATCH函数,并且其全文搜索的限制比较多,比如只能通过MyISAM引擎,比如只能在CHAR,VARCHAR,TEXT上设置全文索引。比如搜索的关键字默认至少要4个字符,比如搜索的关键字太短就会被忽略掉。等等,如果你们在实验的时候可能会实验不出来
4.1.2、在已经存在的表上创建索引

格式:ALTER TABLE 表名 ADD[UNIQUE|FULLTEXT|SPATIAL] [INDEX|KEY] [索引名] (索引字段名)[ASC|DESC]
4.1.2.1、为表添加索引

  就拿上面的book表来说。本来已经有了一个year_publication,现在我们为该表在加一个普通索引

  ALTER TABLE book ADD INDEX BkNameIdx(bookname(30));
4.1.2.2、使用CREATE INDEX创建索引。

  格式:CREATE [UNIQUE|FULLTEXT|SPATIAL] [INDEX|KEY] 索引名称 ON 表名(创建索引的字段名[length])[ASC|DESC]
  解释:其实就是换汤不换药,格式改变了一下而已,做的事情跟上面完全一样,做一个例子。

  在为book表增加一个普通索引,字段为authors。

  CREATE INDEX BkBookNameIdx ON book(bookname);
  4.2、删除索引

 前面讲了对一张表中索引的添加,查询的方法。

 添加的两种方式

 1在创建表的同时如何创建索引,

 2在创建了表之后如何给表添加索引的两种方式,

 查询的方式

  SHOW INDEX FROM 表名\G;  \G只是让输出的格式更好看

 现在来说说如何给表删除索引的两种操作。

 格式一:ALTER TABLE 表名 DROP INDEX 索引名。

 很简单的语句,现在通过一个例子来看看,还是对book表进行操作,删除我们刚才为其添加的索引。

   1、删除book表中的名称为BkBookNameIdx的索引。

   ALTER TABLE book DROP INDEX BkBookNameIdx;
 格式二:DROP INDEX 索引名 ON 表名;

  删除book表中名为BkNameIdx的索引

    DROP INDEX BkNameIdx ON book;

   SHOW INDEX FROM book\G;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
水资源是人类社会的宝贵财富,在生活、工农业生产中是不可缺少的。随着世界人口的增长及工农业生产的发展,需水量也在日益增长,水已经变得比以往任何时候都要珍贵。但是,由于人类的生产和生活,导致水体的污染,水质恶化,使有限的水资源更加紧张。长期以来,油类物质(石油类物质和动植物油)一直是水和土壤中的重要污染源。它不仅对人的身体健康带来极大危害,而且使水质恶化,严重破坏水体生态平衡。因此各国都加强了油类物质对水体和土壤的污染的治理。对于水中油含量的检测,我国处于落后阶段,与国际先进水平存在差距,所以难以满足当今技术水平的要求。为了取得具有代表性的正确数据,使分析数据具有与现代测试技术水平相应的准确性和先进性,不断提高分析成果的可比性和应用效果,检测的方法和仪器是非常重要的。只有保证了这两方面才能保证快速和准确地测量出水中油类污染物含量,以达到保护和治理水污染的目的。开展水中油污染检测方法、技术和检测设备的研究,是提高水污染检测的一条重要措施。通过本课题的研究,探索出一套适合我国国情的水质污染现场检测技术和检测设备,具有广泛的应用前景和科学研究价值。 本课题针对我国水体的油污染,探索一套检测油污染的可行方案和方法,利用非分散红外光度法技术,开发研制具有自主知识产权的适合国情的适于野外便携式的测油仪。利用此仪器,可以检测出被测水样中亚甲基、甲基物质和动植物油脂的污染物含量,为我国众多的环境检测站点监测水体的油污染状况提供依据。
### 内容概要 《计算机试卷1》是一份综合性的计算机基础和应用测试卷,涵盖了计算机硬件、软件、操作系统、网络、多媒体技术等多个领域的知识点。试卷包括单选题和操作应用两大类,单选题部分测试学生对计算机基础知识的掌握,操作应用部分则评估学生对计算机应用软件的实际操作能力。 ### 适用人群 本试卷适用于: - 计算机专业或信息技术相关专业的学生,用于课程学习或考试复习。 - 准备计算机等级考试或职业资格认证的人士,作为实战演练材料。 - 对计算机操作有兴趣的自学者,用于提升个人计算机应用技能。 - 计算机基础教育工作者,作为教学资源或出题参考。 ### 使用场景及目标 1. **学习评估**:作为学校或教育机构对学生计算机基础知识和应用技能的评估工具。 2. **自学测试**:供个人自学者检验自己对计算机知识的掌握程度和操作熟练度。 3. **职业发展**:帮助职场人士通过实际操作练习,提升计算机应用能力,增强工作竞争力。 4. **教学资源**:教师可以用于课堂教学,作为教学内容的补充或学生的课后练习。 5. **竞赛准备**:适合准备计算机相关竞赛的学生,作为强化训练和技能检测的材料。 试卷的目标是通过系统性的题目设计,帮助学生全面复习和巩固计算机基础知识,同时通过实际操作题目,提高学生解决实际问题的能力。通过本试卷的学习与练习,学生将能够更加深入地理解计算机的工作原理,掌握常用软件的使用方法,为未来的学术或职业生涯打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值