精华内容
下载资源
问答
  • 1. in关键字影响索引使用存在边界 此时并没有影响索引的使用 但是当in里面的条件增加大于边界值是就会影响索引使用 如图 当条件增加为8索引失效啦 测试发现 主键索引的边界值和普通索引的边界值还不一样...
    最近跳槽,复习mysql索引发些帖子中的索引失效情况跟我自己测试的不太一样
    所以写个文章把测试记录一下
    

    表和表索引如图
    在这里插入图片描述
    在这里插入图片描述
    索引创建成功开始测试

    1. in关键字影响索引使用存在边界

    在这里插入图片描述

    此时并没有影响索引的使用 但是当in里面的条件增加大于边界值是就会影响索引使用
    

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

    如图 当条件增加为8个时 索引失效啦
    

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

    测试发现 
    主键索引的边界值和普通索引的边界值还不一样 
    主键索引的边界值是7和列数一样 
    普通索引的的边界值是列数的n/2 + 1
    大胆猜测 列数是否会影响in关键的索引失效边界值
    

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

    好的 测试证明 没什么关系
    主键索引使用in的索引失效边界值是  7
    普通索引使用in的索引失效边界值是  4
    后又测试 唯一索引的边界值也是4 就不上图啦
    

    测试结束 in的边界值原因是什么我还没搞明白,如果我搞明白啦会新发文章说明的
    最后 哪里有误大佬勿喷。

    展开全文
  •  explain关键字的使用方法很简单,就是把它放在select查询语句的前面。 mysql查看是否使用索引,简单的看type类型就可以。如果它是all,那说明这条查询语句遍历了所有的行,并没有使用到索引。 比如:explain ...

    explain显示了MySQL如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。简单讲,它的作用就是分析查询性能

      explain关键字的使用方法很简单,就是把它放在select查询语句的前面。

      mysql查看是否使用索引,简单的看type类型就可以。如果它是all,那说明这条查询语句遍历了所有的行,并没有使用到索引。

     

      比如:explain select * from company_info where cname like '%小%'
     
      explain select * from company_info where cname like '小%'

     

     


     以下转自:
    http://www.cnblogs.com/xiaoboluo768/p/5400990.html

    1)、id列数字越大越先执行,如果说数字一样大,那么就从上往下依次执行,id列为null的就表是这是一个结果集,不需要使用它来进行查询。
     
    2)、select_type列常见的有:
    A:simple:表示不需要union操作或者不包含子查询的简单select查询。有连接查询时,外层的查询为simple,且只有一个
    B:primary:一个需要union操作或者含有子查询的select,位于最外层的单位查询的select_type即为primary。且只有一个
    C:union:union连接的两个select查询,第一个查询是dervied派生表,除了第一个表外,第二个以后的表select_type都是union
    D:dependent union:与union一样,出现在union 或union all语句中,但是这个查询要受到外部查询的影响
    E:union result:包含union的结果集,在union和union all语句中,因为它不需要参与查询,所以id字段为null
    F:subquery:除了from字句中包含的子查询外,其他地方出现的子查询都可能是subquery
    G:dependent subquery:与dependent union类似,表示这个subquery的查询要受到外部表查询的影响
    H:derived:from字句中出现的子查询,也叫做派生表,其他数据库中可能叫做内联视图或嵌套select
     
    3)、table
    显示的查询表名,如果查询使用了别名,那么这里显示的是别名,如果不涉及对数据表的操作,那么这显示为null,如果显示为尖括号括起来的<derived N>就表示这个是临时表,后边的N就是执行计划中的id,表示结果来自于这个查询产生。如果是尖括号括起来的<union M,N>,与<derived N>类似,也是一个临时表,表示这个结果来自于union查询的id为M,N的结果集。
     
    4)、type
    依次从好到差:system,const,eq_ref,ref,fulltext,ref_or_null,unique_subquery,index_subquery,range,index_merge,index,ALL,除了all之外,其他的type都可以使用到索引,除了index_merge之外,其他的type只可以用到一个索引
    A:system:表中只有一行数据或者是空表,且只能用于myisam和memory表。如果是Innodb引擎表,type列在这个情况通常都是all或者index
    B:const:使用唯一索引或者主键,返回记录一定是1行记录的等值where条件时,通常type是const。其他数据库也叫做唯一索引扫描
    C:eq_ref:出现在要连接过个表的查询计划中,驱动表只返回一行数据,且这行数据是第二个表的主键或者唯一索引,且必须为not null,唯一索引和主键是多列时,只有所有的列都用作比较时才会出现eq_ref
    D:ref:不像eq_ref那样要求连接顺序,也没有主键和唯一索引的要求,只要使用相等条件检索时就可能出现,常见与辅助索引的等值查找。或者多列主键、唯一索引中,使用第一个列之外的列作为等值查找也会出现,总之,返回数据不唯一的等值查找就可能出现。
    E:fulltext:全文索引检索,要注意,全文索引的优先级很高,若全文索引和普通索引同时存在时,mysql不管代价,优先选择使用全文索引
    F:ref_or_null:与ref方法类似,只是增加了null值的比较。实际用的不多。
    G:unique_subquery:用于where中的in形式子查询,子查询返回不重复值唯一值
    H:index_subquery:用于in形式子查询使用到了辅助索引或者in常数列表,子查询可能返回重复值,可以使用索引将子查询去重。
    I:range:索引范围扫描,常见于使用>,<,is null,between ,in ,like等运算符的查询中。
    J:index_merge:表示查询使用了两个以上的索引,最后取交集或者并集,常见and ,or的条件使用了不同的索引,官方排序这个在ref_or_null之后,但是实际上由于要读取所个索引,性能可能大部分时间都不如range
    K:index:索引全表扫描,把索引从头到尾扫一遍,常见于使用索引列就可以处理不需要读取数据文件的查询、可以使用索引排序或者分组的查询。
    L:all:这个就是全表扫描数据文件,然后再在server层进行过滤返回符合要求的记录。
     
    5)、possible_keys
    查询可能使用到的索引都会在这里列出来
     
    6)、key
    查询真正使用到的索引,select_type为index_merge时,这里可能出现两个以上的索引,其他的select_type这里只会出现一个。
     
    7)、key_len
    用于处理查询的索引长度,如果是单列索引,那就整个索引长度算进去,如果是多列索引,那么查询不一定都能使用到所有的列,具体使用到了多少个列的索引,这里就会计算进去,没有使用到的列,这里不会计算进去。留意下这个列的值,算一下你的多列索引总长度就知道有没有使用到所有的列了。要注意,mysql的ICP特性使用到的索引不会计入其中。另外,key_len只计算where条件用到的索引长度,而排序和分组就算用到了索引,也不会计算到key_len中。
     
    8)、ref
    如果是使用的常数等值查询,这里会显示const,如果是连接查询,被驱动表的执行计划这里会显示驱动表的关联字段,如果是条件使用了表达式或者函数,或者条件列发生了内部隐式转换,这里可能显示为func
     
    9)、rows
    这里是执行计划中估算的扫描行数,不是精确值
     
    10)、extra
    这个列可以显示的信息非常多,有几十种,常用的有
    A:distinct:在select部分使用了distinc关键字
    B:no tables used:不带from字句的查询或者From dual查询
    C:使用not in()形式子查询或not exists运算符的连接查询,这种叫做反连接。即,一般连接查询是先查询内表,再查询外表,反连接就是先查询外表,再查询内表。
    D:using filesort:排序时无法使用到索引时,就会出现这个。常见于order by和group by语句中
    E:using index:查询时不需要回表查询,直接通过索引就可以获取查询的数据。
    F:using join buffer(block nested loop),using join buffer(batched key accss):5.6.x之后的版本优化关联查询的BNL,BKA特性。主要是减少内表的循环数量以及比较顺序地扫描查询。
    G:using sort_union,using_union,using intersect,using sort_intersection:
    using intersect:表示使用and的各个索引的条件时,该信息表示是从处理结果获取交集
    using union:表示使用or连接各个使用索引的条件时,该信息表示从处理结果获取并集
    using sort_union和using sort_intersection:与前面两个对应的类似,只是他们是出现在用and和or查询信息量大时,先查询主键,然后进行排序合并后,才能读取记录并返回。
    H:using temporary:表示使用了临时表存储中间结果。临时表可以是内存临时表和磁盘临时表,执行计划中看不出来,需要查看status变量,used_tmp_table,used_tmp_disk_table才能看出来。
    I:using where:表示存储引擎返回的记录并不是所有的都满足查询条件,需要在server层进行过滤。查询条件中分为限制条件和检查条件,5.6之前,存储引擎只能根据限制条件扫描数据并返回,然后server层根据检查条件进行过滤再返回真正符合查询的数据。5.6.x之后支持ICP特性,可以把检查条件也下推到存储引擎层,不符合检查条件和限制条件的数据,直接不读取,这样就大大减少了存储引擎扫描的记录数量。extra列显示using index condition
    J:firstmatch(tb_name):5.6.x开始引入的优化子查询的新特性之一,常见于where字句含有in()类型的子查询。如果内表的数据量比较大,就可能出现这个
    K:loosescan(m..n):5.6.x之后引入的优化子查询的新特性之一,在in()类型的子查询中,子查询返回的可能有重复记录时,就可能出现这个
     
    除了这些之外,还有很多查询数据字典库,执行计划过程中就发现不可能存在结果的一些提示信息
     
    11)、filtered
    使用explain extended时会出现这个列,5.7之后的版本默认就有这个字段,不需要使用explain extended了。这个字段表示存储引擎返回的数据在server层过滤后,剩下多少满足查询的记录数量的比例,注意是百分比,不是具体记录数。

    展开全文
  • oracle表空间变更导致主键索引失效,重建索引即可 转载于:https://www.cnblogs.com/xunux/p/4854181.html

    oracle表空间变更导致主键索引失效,重建索引即可

    转载于:https://www.cnblogs.com/xunux/p/4854181.html

    展开全文
  • REVERSE关键字之REVERSE索引

    千次阅读 2013-09-26 21:17:59
    昨天说到REVERSE关键字可以指REVERSE函数和...REVERSE索引也是种B树索引,但它物理上将按照列顺序保存的每个索引键值进行了反转。例如, A reverse key index is a type of B-tree index that physically revers

            昨天说到REVERSE关键字可以指REVERSE函数和REVERSE索引,简单介绍了下REVERSE函数的含义,今天简单整理下REVERSE索引。


            REVERSE索引也是一种B树索引,但它物理上将按照列顺序保存的每个索引键值进行了反转。例如,索引键是20,用16进制存储这个标准B树索引键的两个字节是C1,15,那么反向索引存储的字节就是15,C1。

            反向索引主要解决的是叶子块的争用问题。在RAC中,这个问题更加明显,可能多实例反复修改同一个块。举个例子,在一张按照主键顺序存储的表中,一个实例增加记录20,另一个增加21,这两个值的键存储于同一个索引叶子块的左右两侧。

            在反向索引中,插入操作会被反序字节排列分发到索引的全部叶子键中。就像上面的例子,20和21两个键,在标准键索引中,他们应该是相邻的,但在反向索引中,他们会被分开存储。因此按顺序键插入操作的IO会更加平均。

            因为索引上的数据不是按照列存储的顺序,反向索引会禁止一些案例中可以用到的索引范围扫描。例如,如果一个用户查询ID值大于20的记录,那么数据库不能从包含这个ID的块开始查找,而是从所有的叶子块。

            这种索引的设计目的是消除插入操作的索引热点。对于插入的性能提升有帮助,但也是有限的,因为数据库不能使用索引范围扫描了。

    -----摘自MOS《1352477.1》


            Oracle8引入了反向索引。反向索引会逆序排列每个索引列的字节,除了ROWID,但仍旧会保持列的顺序。反向索引适用于Oracle Parallel Server环境。(补充:这里就是Oracle8中著名的OPS)

            在OPS环境中,索引的修改主要集中于一小部分叶子块。索引的反向键值排列可以让插入操作分布到索引的所有叶子键。反向键值索引禁止查询使用索引范围扫描,因为字典次序相邻的键不会在索引中相邻排列。反向键值索引也适用于按升序插入值,删除最早记录的情况,因此可以防止索引的倾斜。

            创建反向键值索引的语法:

    create index <INDEX_NAME> on <TABLE_NAME> (<COLUMN_NAME>, <COLUMN_NAME>) REVERSE;

    create index i_emp on emp (emp#,mgr#) reverse

             如果要检查一个索引是否是反向键值索引,可以查看ind$视图的属性列:

    0x04代表反向索引:

    SQL> select obj#, dataobj#, type#, property from ind$ where ts#=2;

    OBJ#   DATAOBJ#      TYPE#   PROPERTY

    ----------         ----------      ----------            ----------

    24051            24051                1                      1

    24053            24053                1                      1

    24071            24071                1                      4     <--- Reverse index

    -----摘自MOS《1070627.6》

    补充:这里可以看到反向索引是从ind$系统表查询的,这个系统表存储的是所有用户索引对象的信息,不是我们经常使用的user_indexes或dba_indexes视图,dba_indexes字典视图的基础数据表是ind$基表。

    展开全文
  • 作者:杨平平,兰燕,徐海昌,胡霞,欧阳佳通过上述()和(二)分析,基于系统实用的思想,我们提出种针对日汉词典的简单、...同时建立两个索引,存储空间就显得格外重要,所以我们不在索引文件中存储关键字信息,两
  • Python关键字索引

    2018-04-09 22:55:00
    《Python基础教程》和《Python核心编程》读书笔记 关键字 介绍 《核心》页码 《基础》 compile() 内建函数 通过调用compile()可以获得"代码对象" ...
  • css 关键字索引

    2019-07-31 15:01:27
    https://developer.mozilla.org/zh-CN/docs/Web/CSS/Reference
  • 关键字索引搜索

    2012-03-10 17:10:30
    在这种情况下,最简单的搜索算法是对存储在数组中的数据项进行排序,并按关键字进行索引。下面给出这种思想的伪代码: NULLitem 表示空项 Item 表示数据项的类型。   static Item *st; static int M = maxKey;...
  • 主键字段以及唯一性约束字段适合选作索引关键字,原因就是这些字段的值非常离散。尤其是在主键字段创建索引时,cardinality(基数,集的势)的值就等于该表的行数。MySQL在处理主键约束以及唯一性约束时,考虑周全...
  • 在学习过程中,常常遇到CHM文件只有目录而没有关键字索引,反编译后手工添加关键字索引又很麻烦,其实目录和关键字索引很接近,如果能将目录转化成关键字索引也能比较好的解决这问题,为阅读带来方便. 添加关键字索引的...
  • 1. 索引 索引(index)是Elasticsearch对逻辑数据的...Elasticsearch可以把索引存放在台机器或者分散在多台服务器上,每个索引或多分片(shard),每分片可以有多副本(replica)。 2. 文档 存储在Elasti
  • 29、Q:全文索引特定的词"Topic"会产生错误,在一个已经创建了全文索引的数据库中,无论是通过视图中的索引框,还是LotusScript中的程序  索引,当针对"Topic"这个词进行索引时,都会返回错误信息:"Query not ...
  • Solr 优化主关键字索引

    千次阅读 2013-04-11 23:44:45
    大多在Solr 中的存储的数据有某种类型的主关键字...尽管如此,这字段检索到的速度并不是与数据库中的关键字索引一样快的。希望更快,怎么办? Solr 4.x打给我们惊喜。  在字段区域(schema.xml配置中),有如下设置:
  • 一个数据表进行操作时,出现“索引或主关键字不能包含一个 空 (Null) 值”错误信息。考虑是某个字段不允许为空,所以把所有的字段都填充上值,但仍然出现这样的错误。手工在该数据表上直接插入数据,当把除主键...
  • 在网上看到oracle全文索引都是对一张表一个字段进行全文检索,我想对多个表多个字段按照关键字的匹配度排序,sql语句如下 select score(1) ,score(2), CDA.AREANAME,CDS.STREETNAME from C_DICT_STREET cds
  • C#学习笔记--this关键字索引

    千次阅读 2016-07-13 09:34:39
    this关键字索引
  • 索引超出范围。必须为非负值并小于集合大小。 参数名: index ...之前看DataKeyNames就一个,不够用。想用数组。于是: GridView1.DataKeyNames = new string[] { "列名1", "列名2", "列名3" }; 然后 DataK...
  • 2.将各块中的最大关键字构成索引表 3.查找想要查询元素num在索引表的位置 4.在块内顺序查询关键字。 #include<stdio.h> typedef struct node { int start; //定义每数据块的头,尾及最大 int key; int ...
  • Script.NET 2.2版本最大的改进就是编辑器和调试器的易用性,其中自定义关键字、帮助索引、编辑器的API提示和变量提示等功能可以使脚本的开发调试更加方便,下面主要介绍一下如何对这些信息进行定制,例如自己增加...
  • 搜索单个词和短语的精确或模糊的匹配项,要搜索的内容必须是有意义的词语,比如说“苹果”、“建设厅”,不能是一些没意义的词语,比如“阿迪撒啊是”,“儿儿的”这样的词语即使 LIKE是能查询出来,但全文索引对...
  • 【1】 数据库中主键是: 主键是在一个表上定义的唯一键中的一个,而且该键被选为最重要的键。...关键字就是为了方便编程人员在打开数据库的时候知道每个表所代表的值是什么。主要起到注释作用 ...
  • 例如,user表中有user_id,user_name两字段,如果不希望有两条摸一样的的user_id和user_name,我们可以给user表添加两字段的联合唯一索引:alter table user add unique index(user_id,user_name);这样当向表中...
  • 1. 索引和指针排序:因为元素的...因此,不移动元素的排序方法是维持一个索引数组或者索引指针,而排序的目标就是重排索引数组或指针。 2. 链表排序:排序对象为链表形式的数据 3.关键字排序:具有相同关键字的数据
  • 在实际试用中,发现众多搜索引擎的搜索框中,我们在不同的key之间使用空格来表示“或”的语义,并且也许我们的关键字在title或者content中,那么现在我们就需要实现“在一个(或者多个)字段中查找多个关键字”的需求...
  • 例如:在表MyClass中添加了一个字passtest,类型为int(4),默认值为0  mysql> alter table MyClass addpasstest int(4) default '0' 加索引  mysql> alter table 表名add index 索引名(字段名1[,字段名2 ...]); ...
  • 通过Lucene的lukeall-1.0.0.jar 通过 java –jar lukeall-1.0.0.jar 可以通过界面的方式可以看到索引库的所有信息截图如下: 但是现在我们需要获取合适的Term,然后通过命中率排序, 最后的结果转化为 JSON格式交给...
  • Oracle中,如果关键字是一张表的话,还可以通过表的Referenced by属性找到相关的函数、存储过程和触发器等。 如: MSSQL类似。   oracle数据库中如何查看已经创建的索引信息 1. 根据表名,查询...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 330,920
精华内容 132,368
关键字:

关键字就是一个索引