精华内容
下载资源
问答
  • 因为要准备面试了,所以准备了一下,发现有些不熟练了,而且一些操作都需要上网进行 百度 下面是总结 检查表的索引信息 EXEC Sp_helpindex jerry_boys 创建索引 ...删除 索引 drop index pkindex ...

    因为要准备面试了,所以准备了一下,发现有些不熟练了,而且一些操作都需要上网进行 百度

    下面是总结

    检查表的索引信息

    EXEC Sp_helpindex jerry_boys

    创建索引

    create unique/CLUSTERED/nonCLUSTERED    index pkindex on jerry_boys(name)

    删除 索引

     drop index pkindex  on   jerry_boys
     drop index jerry_boys.pkindex  

    修改索引

    exec sp_rename 'jerry_boys.pkindex','jerry_boys.pkindex2'

    创建主键索引

    alter table jerry_boys  add constraint pkindex primary key(name)

    删除主键索引

    alter table jerry_boys drop constraint   pkindex

    如果主键索引没有指定 CONSTRAINT 约束名

    alter table jerry_boys  add   primary key(name)

    那么删除的话,有两种方式

    第一种   EXEC Sp_helpindex jerry_boys    获得 index_name 然后执行下一步

    第二种 

    SELECT    NAME FROM SYS.OBJECTS WITH(NOLOCK)
    WHERE 
    TYPE_DESC ='PRIMARY_KEY_CONSTRAINT' AND 
    PARENT_OBJECT_ID = (SELECT OBJECT_ID 
    FROM SYS.OBJECTS WITH(NOLOCK) 
    WHERE NAME = 'jerry_boys' )

    获得name ,再执行下一步

    alter table jerry_boys drop  constraint PK__jerry_boys__0425A276

    建立索引的原则:

    1) 定义主键的数据列一定要建立索引。

    2) 定义有外键的数据列一定要建立索引。

    3) 对于经常查询的数据列最好建立索引。

    4) 对于需要在指定范围内的快速或频繁查询的数据列;

    5) 经常用在WHERE子句中的数据列。

    6) 经常出现在关键字order by、group by、distinct后面的字段,建立索引。如果建立的是复合索引,索引的字段顺序要和这些关键字后面的字段顺序一致,否则索引不会被使用。

    7) 对于那些查询中很少涉及的列,重复值比较多的列不要建立索引。

    8) 对于定义为text、image和bit的数据类型的列不要建立索引。

    9) 对于经常存取的列避免建立索引 

     

     

    外键要记得加索引,不然会导致死锁问题

    以下是抄来的说明

     

    只有当唯一键或主键不被更新或删除的情况下,才不需要为外键创建索引。为子表外键创建索引可以有两个好处: 
      (1) 避免子表上有表锁,取而代之的是,数据库会获取索引上的行锁。 
      (2) 避免子表上的全表扫描。假设删除departments主表id=10的记录,如果employees子表的department_id外键没有索引,那么就会全表扫描employees子表,以确认是否存在department id=10的记录。
      
      当满足以下两个条件时,会获取子表的表锁: 
      (1) 子表外键不存在索引。 
      (2) 修改主表的主键(例如,删除一行记录或者修改主键值)或者合并主表的多行记录。向主表插入记录不会获取子表的表锁。 
      只有当主键值修改完成,子表的表锁才会被放开。
     

     

     

     

     

     

    展开全文
  • 表索引普通索引唯一索引全文索多列索引隐藏索引删除索引设计原则 普通索引 索引存储: 数据库底层索引实现主要有两种存储类型,B树(BTREE)和哈希(HASH)索引,InnoDB和MyISAM 使用BTREE索引;而MEMORY 存储引擎可以...

    普通索引

    索引存储:
    数据库底层索引实现主要有两种存储类型,B树(BTREE)和哈希(HASH)索引,InnoDB和MyISAM 使用BTREE索引;而MEMORY 存储引擎可以使用BTREE 和HASH 索引,默认用BTREE.在没有指定的情况下,数据库使用的引擎是 InnoDB。

    1. 可以提高检索数据的速度。
    2. 创建和维护索引需要耗费时间,耗费时间的数量随着数据量的增加而增加;索引需要占用物理空间,每一个索引要占一定的物理空间;增加、删除和修改数据时,要动态地维护索引,造成数据的维护速度降低了。
    3. 索引可以提高查询的速度,但是会影响插入记录的速度,因为向有索引的表中插入记录时,数据库系统会按照索引进行排序,这样就降低了插入记录的速度,插入大量记录时的速度影响更加明显。这种情况下,最好的办法是先删除表中的索引,然后插入数据,插入完成后再创建索引。

    普通索引,就是在创建索引时,不附加任何限制条件(唯一、非空等限制)。该类型的索引可以创建在任何数据类型的字段上。

    CREATE TABLE tablename(
        propname1 type1,
        propname2 type2,
        ……
        propnamen type..n,
         INDEX | KEY
        [indexname] (propnamen [(length)] [ ASC | DESC ] ) );
    

    其中,参数INDEX和KEY是用来指定字段为索引的,两者选择其中之一就可以了,作用是一样的;参数indexname是索引名字,可省略;参数propnamen是索引对应的字段的名称,该字段必须为前面定义好的字段;参数length是可选参数,其指索引的长度,必须是字符串类型才可以使用;参数ASC和DESC都是可选参数,ASC表示升序排列,DESC表示降序排列,如果不指定,则为升序。

    在这里插入图片描述

    唯一索引

    唯一索引,就是在创建索引时,限制索引的字段值必须是唯一的。通过该类型的索引可以比普通索引更快速地查询某条记录。

    CREATE TABLE tablename(
        propname1 type1,
        ……
        propnamen type..n,
        UNIQUE INDEX | KEY [indexname] (propnamen [(length)] [ ASC | DESC ] ) );
    

    UNIQUE INDEX和UNIQUE KEY是用来指定字段为索引的,两者选择其中之一即可;参数indexname是索引名字,可省略;参数propnamen是索引对应的字段的名称,该字段必须为前面定义好的字段且必须定义为 UNIQUE 约束;参数length是可选参数,其指索引的长度,必须是字符串类型才可以使用;参数ASC和DESC都是可选参数,ASC表示升序排列,DESC表示降序排列,如果不指定,则为升序。在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    全文索

    全文索引主要对字符串类型建立基于分词的索引,主要是基于CHAR、VARCHAR和TEXT的字段上,以便能够更加快速地查询数据量较大的字符串类型的字段。

    1. 全文索引以词为基础的,MySQL默认的分词是所有非字母和数字的特殊符号都是分词符。
    2. 在默认情况下,全文索引的搜索执行方式为不区分大小写,如果全文索引所关联的字段为二进制数据类型,就以区分大小写的搜索方式执行。
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    MySQL8 中文分词支持
    配置文件my.ini(Windows 10默认路径: C:\ProgramData\MySQL\MySQL Server 8.0) 中增加如下配置项,同时重启MySQL80 服务:

    [mysqld]
    ngram_token_size=2
    

    多列索引

    多列索引,是指在创建索引时所关联的字段不是一个字段,而是多个字段,虽然可以通过所关联的字段进行查询,但是只有查询条件中使用了所关联字段中的第一个字段,多列索引才会被使用。

    和普通索引定义基本相同,不同之处就是增加了多个索引列。

    在这里插入图片描述

    隐藏索引

    隐藏索引可以用来测试索引的性能。验证索引的必要性时不需要删除索引,可以先将索引隐藏,如果优化器性能无影响就可以真正地删除索引。

    ALTER TABLE tablename ALTER  INDEX  index_name INVISIBLE;  #隐藏索引
    ALTER TABLE tablename ALTER  INDEX  index_name VISIBLE;    #取消隐藏
    

    删除索引

    要删除索引,是因为这些索引会降低表的更新速度,影响数据库的性能。

       DROP INDEX indexname ON tablename;  
    

    修改索引: 先删除,后增加

    设计原则

    1. 选择唯一性索引,唯一性索引的值是唯一的,可以更快速地通过该索引来确定某条记录。
    2. 经常需要排序、分组和联合操作的字段建立索引
    3. 经常作为查询条件的字段建立索引
    4. 限制索引的数目
    5. 尽量使用数据量少的索引
    6. 尽量使用前缀来索引
    7. 删除不再使用或者很少使用的索引
    展开全文
  • MongoDB性能篇 -创建索引,组合索引,唯一索引删除索引和explain执行计划 转载 2015年04月13日 13:02:54 标签: mongodb / 337 编辑 删除 MongoDB性能篇 -创建索引,组合索引,唯一索引...

    MongoDB性能篇 -创建索引,组合索引,唯一索引,删除索引和explain执行计划

    转载 2015年04月13日 13:02:54

    MongoDB性能篇 -创建索引,组合索引,唯一索引,删除索引和explain执行计划

    2014-08-15 14:44:17   来源:   评论:0 点击:1165

    一、索引

    MongoDB 提供了多样性的索引支持,索引信息被保存在system.indexes 中,且默认总是为_id创建索引,它的索引使用基本和MySQL 等关系型数据库一样。其实可以这样说说,索引是凌驾于数据存储系统之上的另一层系统,所以各种结构迥异的存储都有相同或相似的索引实现及使用接口并不足为 奇。

    1.基础索引

    在字段age 上创建索引,1(升序);-1(降序):

    db.users.ensureIndex({age:1})

    _id 是创建表的时候自动创建的索引,此索引是不能够删除的。当系统已有大量数据时,创建索引就是个非常耗时的活,我们可以在后台执行,只需指定“backgroud:true”即可。

    db.t3.ensureIndex({age:1} , {backgroud:true})

    2.文档索引

    索引可以任何类型的字段,甚至文档:

     
    db.factories.insert( { name: "wwl", addr: { city: "Beijing", state: "BJ" } } );
    //在addr 列上创建索引
    db.factories.ensureIndex( { addr : 1 } );
    //下面这个查询将会用到我们刚刚建立的索引
    db.factories.find( { addr: { city: "Beijing", state: "BJ" } } );
    //但是下面这个查询将不会用到索引,因为查询的顺序跟索引建立的顺序不一样
    db.factories.find( { addr: { state: "BJ" , city: "Beijing"} } );
     

    3. 组合索引

    跟其它数据库产品一样,MongoDB 也是有组合索引的,下面我们将在addr.city 和addr.state上建立组合索引。当创建组合索引时,字段后面的1 表示升序,-1 表示降序,是用1 还是用-1 主要是跟排序的时候或指定范围内查询 的时候有关的。

    db.factories.ensureIndex( { "addr.city" : 1, "addr.state" : 1 } );
    // 下面的查询都用到了这个索引
    db.factories.find( { "addr.city" : "Beijing", "addr.state" : "BJ" } );
    db.factories.find( { "addr.city" : "Beijing" } );
    db.factories.find().sort( { "addr.city" : 1, "addr.state" : 1 } );
    db.factories.find().sort( { "addr.city" : 1 } )

    4. 唯一索引

    只需在ensureIndex 命令中指定”unique:true”即可创建唯一索引。例如,往表t4 中插入2 条记录:

    db.t4.ensureIndex({firstname: 1, lastname: 1}, {unique: true});

    5.强制使用索引

    hint 命令可以强制使用某个索引。

    db.t5.find({age:{$lt:30}}).hint({name:1, age:1}).explain()

    6.删除索引

    //删除t3 表中的所有索引
    db.t3.dropIndexes()
    //删除t4 表中的firstname 索引
    db.t4.dropIndex({firstname: 1})

    二、explain执行计划

    MongoDB 提供了一个 explain 命令让我们获知系统如何处理查询请求。利用 explain 命令,我们可以很好地观察系统如何使用索引来加快检索,同时可以针对性优化索引。

     
      db.t5.ensureIndex({name:1})
      db.t5.ensureIndex({age:1})
      db.t5.find({age:{$gt:45}}, {name:1}).explain()
      {
          "cursor" : "BtreeCursor age_1",
          "nscanned" : 0,
          "nscannedObjects" : 0,
          "n" : 0,
          "millis" : 0,
          "nYields" : 0,
          "nChunkSkips" : 0,
          "isMultiKey" : false,
          "indexOnly" : false,
          "indexBounds" : {
          "age" : [
                        [45,1.7976931348623157e+308]
                    ]
           }
    }
     

    字段说明:

    • cursor: 返回游标类型(BasicCursor 或 BtreeCursor)
    • nscanned: 被扫描的文档数量
    • n: 返回的文档数量
    • millis: 耗时(毫秒)
    • indexBounds: 所使用的索引

     

    三、优化器profile

    在MySQL 中,慢查询日志是经常作为我们优化数据库的依据,那在MongoDB 中是否有类似的功能呢?答案是肯定的,那就是MongoDB Database Profiler。

    1.开启profiling功能

    有两种方式可以控制 Profiling 的开关和级别,第一种是直接在启动参数里直接进行设置。启动MongoDB 时加上–profile=级别 即可。也可以在客户端调用db.setProfilingLevel(级别) 命令来实时配置,Profiler 信息保存在system.profile 中。我们可以通过db.getProfilingLevel()命令来获取当前的Profile 级别,类似如下操作:

    db.setProfilingLevel(2);

    上面profile 的级别可以取0,1,2 三个值,他们表示的意义如下:

    1. 0 – 不开启
    2. 1 – 记录慢命令 (默认为>100ms)
    3. 2 – 记录所有命令

    Profile 记录在级别1 时会记录慢命令,那么这个慢的定义是什么?上面我们说到其默认为100ms,当然有默认就有设置,其设置方法和级别一样有两种,一种是通过添加 –slowms 启动参数配置。第二种是调用db.setProfilingLevel 时加上第二个参数:

    db.setProfilingLevel( level , slowms )
    db.setProfilingLevel( 1 , 10 );

    2.查询 Profiling 记录

    与MySQL 的慢查询日志不同,MongoDB Profile 记录是直接存在系统db 里的,记录位置system.profile ,所以,我们只要查询这个Collection 的记录就可以获取到我们的 Profile 记录了。列出执行时间长于某一限度(5ms)的 Profile 记录:

    db.system.profile.find( { millis : { $gt : 5 } } )

    MongoDB Shell 还提供了一个比较简洁的命令show profile,可列出最近5 条执行时间超过1ms 的 Profile 记录。  

    四、常用性能优化方案

    1. 创建索引
    2. 限定返回结果数
    3. 只查询使用到的字段
    4. 采用capped collection
    5. 采用Server Side Code Execution
    6. 使用Hint,强制使用索引
    7. 采用Profiling

     

    五、性能监控工具

    1. mongosniff

    此工具可以从底层监控到底有哪些命令发送给了MongoDB 去执行,从中就可以进行分析:以root 身份执行:

    $./mongosniff --source NET lo

    然后其会监控位到本地以localhost 监听默认27017 端口的MongoDB 的所有包请求。

    2.Mongostat

    此工具可以快速的查看某组运行中的MongoDB 实例的统计信息 字段说明:

    • insert: 每秒插入量
    • query: 每秒查询量
    • update: 每秒更新量
    • delete: 每秒删除量
    • locked: 锁定量
    • qr | qw: 客户端查询排队长度(读|写)
    • ar | aw: 活跃客户端量(读|写)
    • conn: 连接数
    • time: 当前时间

    它每秒钟刷新一次状态值,提供良好的可读性,通过这些参数可以观察到一个整体的性能情况。

    3. db.serverStatus

    这个命令是最常用也是最基础的查看实例运行状态的命令之一。

    4.db.stats

    db.stats 查看数据库状态信息。


    from:http://blog.csdn.net/loveyunwt/article/details/8067480

    • 本文已收录于以下专栏:

    MongoDB性能篇 -创建索引,组合索引,唯一索引,删除索引和explain执行计划

    一、索引MongoDB 提供了多样性的索引支持,索引信息被保存在system.indexes 中,且默认总是为_id创建索引,它的索引使用基本和MySQL 等关系型数据库一样。其实可以这样说说...

    MongoDB性能篇 -创建索引,组合索引,唯一索引,删除索引和explain执行计划

    一、索引MongoDB 提供了多样性的索引支持,索引信息被保存在system.indexes 中,且默认总是为_id创建索引,它的索引使用基本和MySQL 等关系型数据库一样。其实可以这样说说...

    做了这件事后,这位程序员月薪从15k变身30k!

    闲下来的时候,程序员为了个人成长,和培养核心价值,该怎么规划和学习呢...

    MongoDB性能篇 - 索引,explain执行计划,优化器profile,性能监控mongosniff

    MongoDB性能篇 - 索引,explain执行计划,优化器profile,性能监控mongosniff一、索引MongoDB 提供了多样性的索引支持,索引信息被保存在system.index...

    mysql创建多列组合唯一索引,unique index

    CREATE TABLE IF NOT EXISTS `ppserver`.`eventTable`( `userId` INT UNSIGNED NOT null,...

    oracle创建表创建唯一索引

    • 2009年05月13日 16:28
    • 5KB
    • 下载

    程序员跨越式成长指南

    完成第一次跨越,你会成为具有一技之长的开发者,月薪可能翻上几番; 完成第二次跨越,你将成为拥有局部优势或行业优势的专业人士,获得个人内在价值的有效提升和外在收入的大幅跃迁……

    Mysql之执行计划 查看索引利用情况 explain

    Mysql之执行计划 查看索引利用情况 explain查看表索引 show index from table使用explain select * from table where ...

    SQL Server-执行计划如何创建索引?

    程序员眼中的 SQL Server-执行计划教会我如何创建索引? 先说点废话以前有 DBA 在身边的时候,从来不曾考虑过...

    主键、外键、唯一索引、单索引与组合索引

    主键、外键、唯一索引、单索引与组合索引一 主键概念:主关键字(primary key)是表中的一个或多个字段,它的值用于唯一地标识表中的某一条记录。通过主键,可以标识表中的唯一字段。 例如,每个...

    Mysql索引介绍及常见索引(主键索引、唯一索引、普通索引、全文索引、组合索引)的区别

    Mysql索引介绍及常见索引(主键索引、唯一索引、普通索引、全文索引、组合索引)的区别Mysql索引概念:说说Mysql索引,看到一个很少比如:索引就好比一本书的目录,它会让你更快的找到内容,显然目...

    Mysql学习-索引总结(B-tree和hash、主键索引、唯一索引、普通索引、全文索引和组合索引)

    对最近学习的mysql中的索引经行总结。其主要内容包括唯一索引、B-tree、哈希索引(自定义哈希索引和Innodb自适应哈希索引)和全文索引(自然语言搜索和布尔搜索)。参考书籍和文章是《Mysql技...

    Mysql主键索引、唯一索引、普通索引、全文索引、组合索引的区别

    Mysql主键索引、唯一索引、普通索引、全文索引、组合索引的区别

    Mysql索引介绍及常见索引类别(主键索引、唯一索引、普通索引、全文索引、组合索引)的区别

    Mysql索引概念:说说Mysql索引,看到一个很少比如:索引就好比一本书的目录,它会让你更快的找到内容,显然目录(索引)并不是越多越好,假如这本书1000页,有500也是目录,它当然效率低,目录是...

    MongoDB 唯一索引

    MongoDB支持的索引种类很多,诸如单键索引,复合索引,多键索引,TTL索引,文本索引,空间地理索引等。同时索引的属性可以具有唯一性,即唯一索引。唯一索引用于确保索引字段不存储重复的值,即强制索引字...

    在使用mongoDB 中Group时,分组字段不是唯一索引记录数不能大于2000

    我在一次统计中,用mongoDB中的Group 对一张记录数100W表进行汇总。结果出现异常信息。Error in executing GroupByCommand 'group' fai...

    分析Oracle有时会用索引来查找数据的原因-oracle执行计划

    http://www.webjx.com/database/oracle-140.html 问:为什么Oracle有时会用索引来查找数据? 答:在你运用SQL语言,向数据库发布一条查询语句...

    MongoDB组合索引的优化

    索引在查询中占的地位无疑是重中之重,因此建立一个好的索引对查询性能的影响也是立竿见影。来自10gen工程师A. Jesse JiryuDavis带来的MongoDB上索引的优化方法以及MongoD...

    MongoDB组合索引的优化

    A. Jesse Jiryu Davis —— 10gen工程师,从事MongoDB、Python及Tornado。在Dzone上分享了MongoDB中组合索引的最佳建立方法以及索引中字段的最优顺序。...

    10gen工程师谈MongoDB组合索引的优化

    A. Jesse Jiryu Davis —— 10gen工程师,从事MongoDB、Python及Tornado。在Dzone上分享了MongoDB中组合索引的最佳建立方法以及索引中字段的最优顺序。...
    • shmnh
    • shmnh
    • 2014年12月14日 03:05
    • 387

    在线课程

    展开全文
  • 索引类型type 我们可以清楚的看到type那一栏有index ALL eq_ref,他们都代表什么意思呢? 首先类型有许多,这里我只给大家介绍用的最多的几种类型: system>const>eq_ref>re...

     

     

    背景知识

    在使用sql的过程中经常需要建立索引,而每种索引是怎么处罚的又是怎么起到作用的,首先必须知道索引和索引的类型。

     


     

    索引类型type

     

     

    我们可以清楚的看到type那一栏有index ALL eq_ref,他们都代表什么意思呢?

    首先类型有许多,这里我只给大家介绍用的最多的几种类型:

    system>const>eq_ref>ref>range>index>ALL

    越往左边,性能越高,比如system就比ALL类型性能要高出许多,其中systemconst只是理想类型,基本达不到;

    我们自己实际能优化到ref>range这两个类型,就是你自己写SQL,如果你没优化基本上就是ALL,如果你优化了,那就尽量达到ref>range这两个级别;

    左边基本达不到!

    所以,要对type优化的前提是,你需要有索引,如果你连索引都没有创建,那你就不用优化了,肯定是ALL.....

    Type级别详解

    .system级别

    索引类型能是system的只有两种情况:

    1.只有一条数据的系统表

    只有一条数据的系统表,就是系统里自带一张表,并且这个表就一条数据,这个基本上就达不到,这个是系统自带的表,而且就一条数据,所以基本达不到;

    2.或衍生表只能有一条数据的主查询

    这个是可以实现的,但是在实际开发当中,你不可能去写一个这么个玩意儿,不可能公司的业务去让你把SQL索引类型写实system...

    SQL语句:select * From (select * From test01) t where tid = 1;//前面需要加explain

    执行结果:

     

     

    就是把它凑出来即可;

    我之所以能达到system,是因为我满足了它的第二个条件;

    .const级别

    const条件稍微低一点,但是基本上也达不到;

    1.仅仅能查出一条的SQL语句并且用于Primary key unique索引;

    这个我就不说了把,都知道,所以在企业里根本不可能实现,能查出来一条SQL语句,你的索引还必须是Primary keyunique

    SQL语句:select * tid From test01 where tid = 1;//前面需要加explain

    执行结果:

     

     

    根据tid找,因为tid是我设置的主键,主键就是Primary key,并且只能有一条数据,我表里面本来就一条,所以我满足了;

    .eq_ref级别

    唯一性索引:对于每个索引键的查询,返回 匹配唯一行数据(有且只有1个,不能多,不能0;

    解说:比如你select ...from 一张表 where 比方说有一个字段 name = 一个东西,也就是我们以name作为索引,假设我之前给name加了一个索引值,我现在根据name去查,查完后有20条数据,我就必须保证这二十条数据每行都是唯一的,不能重复不能为空!

    只要满足以上条件,你就能达到eq_ref,当然前提是你要给name建索引,如果name连索引都没,那你肯定达不到eq_ref;

    此种情况常见于唯一索引和主键索引;

    比如我根据name去查,但是一个公司里面或一个学校里面叫name的可能不止一个,一般你想用这个的时候,就要确保你这个字段是唯一的,id就可以,你可以重复两个张三,但是你身份证肯定不会重复;

    添加唯一键语法:alter table 表名 add constraint 索引名 unique index(列名)

    检查字段是否唯一键:show index form 表名;被展示出来的皆是有唯一约束的;

    以上级别,均是可遇不可求!!!!

    .ref级别

    ref还是问题不大的,只要你上点心,就可以达到

    非唯一性索引:对于每个索引键的查询,返回匹配的所有行(可以是0,或多个)

    假设我现在要根据name查询,首先name可能有多个,因为一个公司或学校叫小明的不止一个人,但是你要用name去查,你必须name是索引,我们先给它加个索引,因为要达到ref级别,所以这里我给它加一个单值索引

    单值索引语法:alter table 表名 索引类型 索引名(字段)

    现在我们根据索引来查数据,这里我假设我写的单值索引;

    alter table student add index index_name (name);

    这个时候我们再去编写sql语句:

    alter table student add index index_name (name);

    因为name是索引列,这里假设有两个叫张三的,ref级别规则就是能查出多个或0个,很显然能查出来多个,那这条SQL语句,必然是ref级别!

    执行结果:

     

     

    数据:

     

     

    .range级别

    检索指定范围的行,查找一个范围内的数据,where后面是一个范围查询 (between,in,> < >=);

    注:in 有时会失效,导致为ALL

    现在我们写一个查询语句,前提是,tid一定是一个索引列,如果是id的话,就用主键索引,也就是唯一索引,值不可以重复,这个时候我们范围查询的时候要用它来做条件:

     EXPLAIN SELECT t.* FROM student t WHERE t.tid BETWEEN 1 AND 2; ;//查询tid12

    查看执行结果:

     

     

    .index级别

    查询全部索引中的数据

    讲解:假设我有一张表,里面有id name age,这个时候name是一个单值索引,一旦name被设定成索引,它就会成为B树一样,经过各种算法将name里面的值像树一样进行分类,这个时候我where name = **,就相当于把这颗B树查了一个遍,

    也就是说,你把name这一列给查了一遍;

    SQL语句:select id From student;//我只查被索引声明的列,必然就是index了;

    执行结果:

     

     

    .ALL级别

    查询全部表数据,就是select name From student;

    其中 name 不是索引;

    如果你查的这一列不是索引,就会导致全表扫描,所以要避免全表扫描

    执行结果:

     

     

     


    索引的分类:

    主键索引(PRIMAY KEY)

    唯一索引(UNIQUE)

    常规索引(INDEX)

    全文索引(FULLTEXT)

    主键索引

    主键:

      某一个属性组能唯一标识一条记录

      如:学生表(学号,姓名,班级,性别等等),学号时唯一标识的,可以作为主键

    特点:

      最常见的索引类型

      确保数据记录的唯一性

      确定特定数据记录在数据库中的位置

    实例:

    CREATE TABLE `表名`(、

      `GradeID` INT(11)  AUTO_INCREMENT PRIMARY KEY,

      #或 PRIMARY KEY(`GradeID`)

    唯一索引

    作用:

          避免同一个表中某数据列中的值重复

    与主键索引的区别

      主键索引只能有一个

      唯一索引可有多个

    实例:

    CREATE TABLE `Grade`(、

      `GradeID` INT(11)  AUTO_INCREMENT PRIMARY KEY,

      `GradeName` VARCHAR(32) NOT NULL UNIQUE

      #或 UNIQUE KEY ` GradeID`(`GradeID`)

     

     

     

    常规索引

    作用:

    快速定位特定数据

    注意:

    index 和 key 关键字都可以设置常规索引

    应加在查询条件的字段

    不易添加太多常规索引,影响数据的插入,删除和修改操作

    实例:

    ##创建表时添加

    CREATE TABLE `result`{

      //省略一些代码

      INDEX / KEY `ind` (`studentNo`,`subjectNo`)

    }

    ##创建后追加

    ALTER TABLE `result` ADD  INDEX `ind` (`studentNo`,`subjectNo`);

     

    全文索引

    作用:

    快速定位特定数据

    注意:

    只能用于MyISAM类型的数据表

    只能用于CHAR ,VARCHAR,TEXT数据列类型

    使用大型数据集

    实例:

    CREATE TABLE `student`(

      #省略一些sql语句

        FULLTEXT(`StudentName`)

    )ENDINE=MYISAM;

    ALTER TABLE employee ADD FULLTEXT(`first_name`)

    转载于:https://www.cnblogs.com/zhaokunbokeyuan256/p/10761548.html

    展开全文
  • Mysql创建索引、增加索引删除索引

    千次阅读 2019-01-20 15:12:08
    一、在创建数据表的时候创建索引 在MySQL中创建表的时候,可以直接创建索引。基本的语法格式如下: CREATE TABLE 表名(字段名 数据类型 [完整性约束条件], [UNIQUE | FULLTEXT | SPATIAL] INDEX | KEY [索引名]...
  • ElasticSearch索引删除问题

    千次阅读 2019-07-12 13:38:50
    需求,索引错误,需删除索引,创建新索引。 由于程序没有停止,我创建了一条索引,系统又创建了1条。 { "error": { "root_cause": [ { "type": "index_not_found_exception", "reason": "no such index", ...
  • MySQL创建索引删除索引和查看查索引
  • #删除索引 DELETE /my_store #创建索引 PUT /my_store #创建映射 PUT /my_store/_mapping/products?pretty { "properties": { "price": { "type": "long" }, &...
  • 索引

    万次阅读 2020-02-19 23:37:23
    MySQL索引笔记
  • Elasticsearch系列篇之删除索引

    万次阅读 2017-04-05 14:32:53
    Elasticsearch删除索引Elasticsearch可以删除索引,但是不能像数据库一样直接删除type,如果想要删除type有两种方式 a.删除index,这样会把所有该index的所有的type都会删除 b.重新创建一个新的type,使用新的type,...
  • 场景:想只删除索引下的数据,不删除索引结构,(windows环境)服务器中没有postman工具 第一种:只删除索引中的所有数据,不删除索引结构 POST 192.168.100.88:9200/my_index/_delete_by_query 请求体: { ...
  • Elasticsearch定时删除索引

    千次阅读 2018-12-18 09:44:44
    在Elasticsearch中,我们常常按时间建立索引,以便我们今后的使用与管理,同时我们也经常按时间去删除一些老的数据。比如只保留最近3天的数据,只需将超多3天的索引数据删除就好了。删除索引有很多种方法,你可以...
  • 创建索引MySQL创建索引的语法如下:123CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [USING index_type] ON table_name (index_col_name,...)其中对应的语法变量信息如下:[UNIQUE|FULLTEXT|SPATIAL]中...
  • Lucene深入学习(11)Lucene的索引删除

    千次阅读 2018-01-29 22:19:34
    摘要: 之前的章节中已经说明了索引的添加,本节将介绍如何将特定的一个或多个文档从索引中删除。 索引读取 IndexReader是维护索引重要的工具类,它...索引删除 在建立索引的过程中,Lucene会为每个加入索引的Docu
  • Lucene索引删除、更新、恢复和加权操作
  • MySQL 索引的查询、创建与删除

    千次阅读 2019-10-29 10:01:22
    索引类型 ① 普通索引(单列索引) ...CREATE TABLE table_name[col_name data type] [unique|fulltext][index|key][index_name](col_name[length])[asc|desc] unique|fulltext为可选参数,分别表示唯一索...
  • oracle创建索引: CREATE INDEX 索引名 on要创建索引的...oracle索引索引的建立、修改、删除 索引 索引是关系数据库中用于存放每一条记录的一种对象,主要目的是加快数据的读取速度和完整性检查。建立索引是一项技...
  • 一、简介 索引是关系数据库中用于存放每一条记录的一种对象,主要目的是加快数据的读取速度和完整性检查。建立索引是一项技术性要求高的工作。一般在数据库设计阶段的与数据库结构一道考虑。应用系统的性能直接与...
  • MongoDB 索引

    2019-04-14 13:42:12
    一、简介 在大数据量的MongoDB时索引可以提高查询效率,如果没有创建索引,查询MongoDB数据效率非常低,在查询数据时会对集合进行全表扫描并选取那些...key and index type specification>, <options> )...
  • 删除主键的时候,索引是否删除

    千次阅读 2017-09-18 16:37:10
    问题:删除主键时是否会同时自动删除索引? 答案:是否删除索引取决于索引是创建主键时自动创建的,还是创建主键前手工创建的。 如果期望删除主键时,同时删除索引,安全的做法是增加drop index选项。另外,如果...
  • 最近做一个项目用到了elasticsearch,但是由于服务器不支持nmp的安装(试了好多次都安不上)所以就只好用命令的方式来创建和删除索引 1.创建索引 sudo curl - XPUT ip: 9200 / crawler_monitor_task_crawler - 2019 ...
  • Elasticsearch 删除type

    万次阅读 2018-04-14 15:29:59
    首先要说明的是现在的Elasticsearch已经不支持删除一个type了,所以使用delete命令想要尝试删除一个type的时候会出现如下错误,如果存在一个名为edemo的index和tets的type:No handler found for uri [/edemo/test] ...
  • 关于为什么要创建hbase二级索引,这里不再赘述,直接开始安装配置 1.环境准备  ①安装HBASE,solr, Key-Value Store Indexer,这些在CDH的服务里面都有  ②进入CM HBASE配置页面,打开复制和编制索引: ...
  • 1、简单创建索引 #lcoalhost可以换成http://ip curl -XPUT 'localhost:9255/rumor/'  2、带参数创建索引(这里只指定replica数,可以指定更多的参数) curl -XPUT 'localhost:9255/rumor' -d ' ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 305,119
精华内容 122,047
关键字:

索引删除type