精华内容
下载资源
问答
  • 对于这个问题,虽然可以在做页面时给完整文章标题可以手工添加高亮标签对<font></font>,但这样会带来一些麻烦,如代码变得很协调,更糟糕是可能会出现这样情况:用户选择以文章完整标题作为输入,且标题...
  • 根据查询字段的位置不同来决定,如查询a, a,b a,b,c a,c 都可以索引的,其他条件的查询能走索引。组合索引 有“最左前缀”原则。就是只从最左面的开始组合,并是所有只要含有这三列存在的字段的查询都会用到该...

    情况描述:在MySQL的user表中,对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引?

    根据查询字段的位置不同来决定,如查询a,     a,b    a,b,c    a,c   都可以走索引的,其他条件的查询不能走索引。

    组合索引 有“最左前缀”原则。就是只从最左面的开始组合,并不是所有只要含有这三列存在的字段的查询都会用到该组合索引。

    验证过程如下所示:

    首先,在SQLyog中建立一个user表,如下图所示;

    5582e26ef2541cb6ffde19eec232036d.png

    对中间3个字段(user_name,user_age,user_password)进行联合索引 index_user_join

    查询情况如下所示:

    1.同时查询这3个字段作为条件的SQL,索引情况及SQL语句如下所示:

    SELECT *FROM t_user WHERE  user_name='zs' AND user_age=20 AND user_password='123456';

    其使用索引情况如下所示:

    e937cf5079e8c71fdae5070a8db8f998.png

    从执行结果上可以看到是从走索引进行查询的

    2.使用user_age和user_password作为查询条件进行查询,索引及SQL语句如下所示:

    a0e0cd1f6e02c233cb855255e2ccaccb.png

    3.使用user_name和user_password作为查询条件进行查询,索引及SQL语句如下所示:

    77f78cdf4171e743ae5b9e083dbe1df1.png

    4.使用user_name作为查询条件进行查询,索引及SQL语句如下所示:

    2c721836431cf77b3c6a4b2b349500ee.png

    5.使用user_age作为查询条件进行查询,索引及SQL语句如下所示:

    a01d2dcd9b146e84191d545051c87be3.png

    6.使用user_password作为查询条件进行查询,索引及SQL语句如下所示:

    031ca2028ddfaf7c53373d6656a2646e.png

    以上是针对普通的字段建立联合索引的测试情况及截图,欢迎小伙伴们来补充~

    展开全文
  • 如果您对这部分概念并熟悉,可以参考之前文章:[Cassandra教程] (四)使用Key正确姿势对于Cassandra来说,一级索引就是Primary Key. 因为查询时候,可以直接根据Key算出token然后直接获取对应记录。 而...

    1.什么是二级索引?

    我们前面已经介绍过Cassandra之中有各种Key,比如Primary Key, Cluster Key 等等。如果您对这部分概念并不熟悉,可以参考之前的文章: [Cassandra教程] (四)使用Key的正确姿势 对于Cassandra来说,一级索引就是Primary Key. 因为查询的时候,可以直接根据Key算出token然后直接获取对应的记录。

    而二级索引,作为辅助索引就是为了找到一级索引。然后再通过一级索引找到真正的值

    原文链接:http://www.flyml.net/2016/09/16/cassandra-tutorial-secondary-index/

    2. 二级索引的原理

    Cassandra之中的索引的实现相对MySQL的索引来说就要简单粗暴很多了。他实际上是 自动偷偷新创建了一张表格,同时将原始表格之中的索引字段作为新索引表的Primary Key!并且存储的值为原始数据的Primary Key

    因此,什么样的数据、字段适合做二级索引,也就很清楚了。

    我们翻译一下官方的解释:

    参考网址: https://docs.datastax.com/en/cql/3.1/cql/ddl/ddl_when_use_index_c.html

    原文链接:http://www.flyml.net/2016/09/16/cassandra-tutorial-secondary-index/

    3. 什么时候 不适合 用索引

    1. High-cardinality 列。 相当于这一列的值很多很多的时候。
      1. 因为查询了很多结果只能取出一小部分数据集
    2. counter 类型的列
    3. 删除、更新太过频繁的列
      1. Cassandra删除、更新数据都会给老数据设置一个Tombstone(墓碑)。当Tombstone的数据查过10K的时候,就会报错
      2. 再加上需要同步的更新索引表,Tombstone本身的标记也会很消耗资源
    4. 数据集值太多
      1. 原文英文没怎么看懂,这是笔者自己的理解。
      2. 再次强调一下:二级索引里面存储的是原始数据的Primary Key。因此如果一次查询的数据过多就会遇到超时异常

    总结一下:

    就是索引对应的数据值不能太多也不能太少。 太多就超时,太少就浪费资源(需要创建太多的Primary Key)。 同时索引的列还要稳定,不能频繁的删除或者更新~

    所以个人认为, 能不用Cassandra之中的索引就不要用 ,还不如自己显示的创建一个

    原文链接:http://www.flyml.net/2016/09/16/cassandra-tutorial-secondary-index/

    4. 如何使用索引

    索引的使用非常简单,参考下面的代码以及相应的注释:

    -- 创建索引 CREATE INDEX artist_names ON playlists( artist );   -- 查询 SELECT * FROM playlists WHERE artist = 'Fu Manchu';   -- 优化查询 SELECT * FROM playlists WHERE id = 62c36092-82a1-3a00-93d1-46196ee77204 AND  artist = 'Fu Manchu';

    原文链接:http://www.flyml.net/2016/09/16/cassandra-tutorial-secondary-index/

    转载于:https://www.cnblogs.com/bonelee/p/6278943.html

    展开全文
  • 官方文档:index简章翻译文末附原文:索引... · not_analyzed:将字段的原始值放入索引中,作为一个独立term,它是除string字段以外所有字段的默认值。 · analyzed:string字段的默认值,会先进行分析后,再把

    官方文档:index

    简章翻译

    文末附原文:

    索引index
    这个参数可以控制字段应该怎样建索引,怎样查询。它有以下三个可用值:
    · no: 不把此字段添加到索引中,也就是不建索引,此字段不可查询
    · not_analyzed:将字段的原始值放入索引中,作为一个独立的term,它是除string字段以外的所有字段的默认值。
    · analyzed:string字段的默认值,会先进行分析后,再把分析的term结果存入索引中。

    那么如果不需要的值,直接在mapping中设置为no就可以了。其它信息参考:store_source field

    简要说明:store就是把这个字段单独存储,默认是不存储的,默认存储的是 _source ,只有设置了才会存储,比如,有一个mapping有三个字段,title,subject,content,其中title,subject比较小,而content非常非常大,如果,你的查询结果只需要title,subject而不需要content时,把title,subject单独存储,可以节省很多时间

    原文

    index
    The index option controls how field values are indexed and, thus, how they are searchable. It accepts three values:

    no

    Do not add this field value to the index. With this setting, the field will not be queryable.

    not_analyzed

    Add the field value to the index unchanged, as a single term. This is the default for all fields that support this option except for string fields. not_analyzed fields are usually used with term-level queries for structured search.

    analyzed

    This option applies only to string fields, for which it is the default. The string field value is first analyzed to convert the string into terms (e.g. a list of individual words), which are then indexed. At search time, the query string is passed through (usually) the same analyzer to generate terms in the same format as those in the index. It is this process that enables full text search.

    For example, you can create a not_analyzed string field with the following:

    PUT /my_index
    {
      "mappings": {
        "my_type": {
          "properties": {
            "status_code": {
              "type": "string",
              "index": "not_analyzed"
            }
          }
        }
      }
    }
    展开全文
  • 具体问题:58、如果一个表a字段是从1~100,b字段是从1~...前面一个问题,首先重复率高的字段不适合用于作为索引,因此应该选c字段作为索引,因为c字段的重复率最低。那为什么选择重复率低的字段呢,主要两个理由: 1

    具体问题:58、如果一个表a字段是从1~100b字段是从1~1000c是从1~10000,选取哪个列作为索引,为什么?如果需要查找a>一个数,b=一个数,c小于一个数,如何创建联合索引?


    以下是我个人的思考,这个问题是在字节面试的时候问的,当时答得不好,现在回过头来再思考一下,当然还是比较浅显,也不一定对,希望了解的人可以在回复里面补充一下。

    前面一个问题,首先重复率高的字段不适合用于作为索引,因此应该选c字段作为索引,因为c字段的重复率最低。那为什么选择重复率低的字段呢,主要两个理由:

    1、因为如果对重复率很高的字段设置了索引,首先因为这个一定是是辅助索引,查询的时候还要回表,也就是得到了行号,还要到主键的聚簇索引里面再查,重复率高就意味着会进行大量的回表操作,效率很低。重复率低意味着更少的回表操作。

    2、另外,c字段里面每一个要查找的值的数量,差不多都是b的十分之一,比如c=1的数量可能是b=1的数量的十分之一,也就是说它最后返回的结果的数量更少,范围更小,可以更快查到,所以用c作为索引。


    对于第二个问题,这是关于联合索引的问题,在创建联合索引的时候,一般选择将选择性高的字段放在前面,所谓的选择性高,就是使用这个字段来进行查询的话,他可以过滤的数据更多,得到的结果更少,这里如果单纯讨论选择性的话,肯定是c字段的选择性更高,但是我们使用联合索引的时候还要考虑最左原则

    最左原则里MySQL会一直向右匹配直到遇到范围查询。如有索引 (a,b,c,d),查询条件 a=1 and b=2 and c>3 and d=4,则会在每个节点依次命中a、b、c,无法命中d。如题意,里面两个都是范围查询,因此b索引是值查询,索引索引首先建在b上。

    然后是c,因为c即使是范围搜索,他还是可以集中索引,只有范围索引后面的一个才不能击中索引,因此最后的创建联合索引的顺序是:b,c,a。

     

     

    展开全文
  • MySQL---字段索引

    2019-05-02 06:24:11
    MySQL 是支持前缀索引的,也就是说,你可以定义字符串的一部分作为索引。默认地,如果你创建索引的语句指定前缀长度,那么索引就会包含整个字符串。 索引选取的越长,占用的磁盘空间就越大,相同的数据页能放下的...
  •   什么字段应该建立索引 在作为主键的列... 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间; 在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速...
  • 第一:选择唯一性索引 唯一性索引的值是唯一的,可以更快捷的通过该索引来确定...经常作为查询条件的列作为索引会提高速度 3.位经常需要进行排序.分组和联合操作的的字段建立索引. order by group by distinct uni...
  • 字符串如何加索引问题普通索引...Mysqll是支持前缀索引的,也就是说,你可以定义字符串的一部分作为索引,默认的,如果你创建索引的语句指定前缀长度,那么索引就会包含整个字符串 比如下面两个例子: ALTER TABLE S
  • 因为有个功能是要求用户id 电话号 信箱 第三方id 唯一,用的数据库是mongodb ,做好唯一部分索引后发现,如果form的字段未编辑 还是会存入"",下一次提交后,字段一样会因为""重复,达到了预期。 想法是:1.用户...
  • 首先,mysql是支持前缀索引的,我们可以定义字符串的一部分作为索引。 必要性 如果你创建索引指定前缀长度,则索引包含整个字符串,占用空间比较大, 如果我们使用好前缀索引,可以即节省空间又不会增加太多查询...
  • 一、索引的作用:快速...可以由单个字段创建索引,也可以在多个字段的组合上创建索引,最多超过15个字段。 二、索引的分类: 按B-树形式存储的主要索引的分类: 1、普通索引(index)没有唯一性要求; 2、唯一索...
  • 我之前做法是,先将Number转成字符串String类型,再拿String转为Int,拿转完后Int值作为数组脚标,但是这样出现了一个问题就是把NSNumber转String时,崩溃,因为Number能转为String. 其实不用转String,直接强制...
  • MySQL的索引

    千次阅读 2020-01-14 16:11:26
    对于经常作为查询条件的字段,加索引 因为索引利于增加查询速率,因为一般索引加到where 后面的条件字段 对于经常用来插入、修改、删除的字段,尽量索引 所以虽然索引可以加快查询速度,但不是越多越好,要...
  • 1.选择唯一性索引建立unique索引,如果字段中又唯一性的字段,则可以建立唯一索引,比如学生表的学号是不会重复的2.经常排序的字段,分组的、连表查询的关联的字段建立索引经常需要 order by、group by、* join、...
  • mysql联合索引,abc的争议实践原因:在一次和同事讨论mysql联合索引的面试题时出现了争议。主要问题是:a、b、c三个字段作为联合索引,b、c;和a、c情况到底会不会命中索引?网上查阅相关博客发现很多答案一样,...
  • 频繁作为where条件语句查询的字段  2. 关联字段需要建立索引,例如外键字段,student表中的classid, classes表中的schoolid 等  3. 排序字段可以建立索引  4. 分组字段可以建立索引,因为分组的前提是排序 ...
  • 频繁作为where条件语句查询的字段  2. 关联字段需要建立索引,例如外键字段,student表中的classid, classes表中的schoolid 等  3. 排序字段可以建立索引  4. 分组字段可以建立索引,因为分组的前提是排序 ...
  • 2.为经常作为查询语句中的字段建立索引。 3.为经常需要进行排序、分组、联合操作的字段建立索引。 4.不要对需要经常进行增删改的字段建立索引 5.选择区分度大的字段建立索引 6.选择数据量小的字段建立索引 7.最左...
  • 索引可以提高数据的检索效率,也可以降低数据库的IO成本...1、较频繁地作为查询条件的字段 这个都知道。什么是教频繁呢?分析你执行的所有SQL语句。最好将他们一个个都列出来。然后分析,发现其中有些字段在大部分...
  • 1.选择唯一性索引建立unique索引,如果字段中又唯一性的字段,则可以建立唯一索引,比如学生表的学号是不会重复的2.经常排序的字段,分组的、连表查询的关联的字段建立索引经常需要 order by、group by、* join、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 637
精华内容 254
关键字:

不可以作为索引的字段