精华内容
下载资源
问答
  • Greenplum索引使用详解

    千次阅读 2020-01-20 14:45:40
    在pg中,我们会经常使用索引来加速查询,但是在Greenplum中对于索引的依赖却...通过表分区,要扫描的数据量可能会更少,因此索引使用的场景可能会更少。 并且索引通常会增加一些数据库负担,它们使用存储空间并且在...

    在pg中,我们会经常使用索引来加速查询,但是在Greenplum中对于索引的依赖却比较低,应该合理的使用。因为在gp中顺序扫描会很快,而索引扫描则是一种随即搜索的模式。Greenplum的数据分布在Segment上,因此每个Segment会扫描全体数据的一小部分来得到结果。通过表分区,要扫描的数据量可能会更少,因此索引使用的场景可能会更少。

    并且索引通常会增加一些数据库负担,它们使用存储空间并且在表被更新时需要被维护。

    索引类型:
    和pg不同,gp中仅支持btree和gist索引,同时在最新的Greenplum6.0版本又支持了gin和sp-gist索引。并且gp中支持了在pg中不支持的bitmap索引。

    bitmap索引类似GIN倒排,只是bitmap的KEY是列的值,VALUE是BIT(每个BIT对应一行),而不是行号list或tree。
    bitmap与btree一样,都支持 等于,大于,小于,大于等于,小于等于的查询。但是要注意:bitmap索引适用于只查询数据而不更新数据的数据仓库应用。

    例子:
    –建表

    postgres=# CREATE table t2 (id int,info text)
    postgres-# with(appendonly=true,orientation=column)
    postgres-# distributed by(id);
    CREATE TABLE
    postgres=# insert into t2 select generate_series(1,100000),md5(random()::text);
    INSERT 0 100000
    

    –不使用索引

    postgres=# EXPLAIN select * from t2 where id <10;
                                       QUERY PLAN                                    
    ---------------------------------------------------------------------------------
     Gather Motion 2:1  (slice1; segments: 2)  (cost=0.00..1364.00 rows=10 width=37)
       ->  Append-only Columnar Scan on t2  (cost=0.00..1364.00 rows=5 width=37)
             Filter: id < 10
     Optimizer status: legacy query optimizer
    (4 rows)
    

    –创建bitmap索引

    postgres=# CREATE INDEX idx_t2 on t2 using bitmap(id);
    CREATE INDEX
    

    –再次查看执行计划
    发现走bitmap索引扫描了。

    postgres=# EXPLAIN select * from t2 where id <10;     
                                             QUERY PLAN                                         
    --------------------------------------------------------------------------------------------
     Gather Motion 2:1  (slice1; segments: 2)  (cost=101.98..808.90 rows=10 width=37)
       ->  Bitmap Append-Only Column-Oriented Scan on t2  (cost=101.98..808.90 rows=5 width=37)
             Recheck Cond: id < 10
             ->  Bitmap Index Scan on idx_t2  (cost=0.00..101.98 rows=5 width=0)
                   Index Cond: id < 10
     Optimizer status: legacy query optimizer
    (6 rows)
    

    重建索引:
    –重建指定索引

    postgres=# REINDEX INDEX idx_t2;
    REINDEX
    

    –重建一张表上所有索引

    postgres=# REINDEX TABLE t2;
    REINDEX
    
    展开全文
  • 总结一些索引使用和优化规范

    万次阅读 2019-04-01 20:40:15
    1、索引列的数据长度能少则少。 答:这个原因很简单,B-Tree各个节点能存储信息更多,减少树的告诉,效率自然也能得到提示。 2、索引一定不是越多越好,越全越好,一定是建合适的。 答:索引多了,检索速度虽然可能...

    1、索引列的数据长度能少则少。
    答:这个原因很简单,B-Tree各个节点能存储信息更多,减少树的告诉,效率自然也能得到提示。

    2、索引一定不是越多越好,越全越好,一定是建合适的。
    答:索引多了,检索速度虽然可能得到提升。但是“写”相关操作的效率可就不容小觑了。

    3、匹配列前缀可用到索引like abc%。但是 like %9999%like %9999用不到索引。
    答:最左匹配原则。

    4、Where条件中not in 和 <> 操作无法使用索引。
    答:最左匹配原则。

    5、匹配范围值,order bygroup by也可用到索引。
    答:B-Tree本身就是有序的。

    6、多用指定列査询,只返回自己想得到的数据列,少用SElECT *
    答:首先减少IO操作,其次可以利用到覆盖索引

    7、联合索引中如果不是按照索引最左列开始査找,无法使用索引。
    答:最左匹配原则。

    8、联合索引中如果査询中有某个列的范围査询,则其右边的所有列都无法使用索引。
    答:最左匹配原则。

    展开全文
  • mysql的索引使用优先顺序

    千次阅读 2020-03-13 14:31:25
    mysql的索引可以大大的增加查询的效率,但是有些时候命名我们索引的字段...mysql在索引使用的时候一般都会把数据最小的字段放前面,也就是最能确定结果的字段,因为索引的第一个字段的检索范围是最小的,然后根据可以确...

    mysql的索引可以大大的增加查询的效率,但是有些时候命名我们索引的字段和where条件后面的字段是一致的,但是使用explain查看之后发现并没有使用字段对应的索引.

    这个时候首先想到的字段都对应了,还不对,那应该是顺序有问题了.咨询了大佬之后,更加确定了.

    mysql在索引使用的时候一般都会把数据最小的字段放前面,也就是最能确定结果的字段,因为索引的第一个字段的检索范围是最小的,然后根据可以确定的数据范围的大小依次排序.这个时候不要担心sql里使用字段的顺序是不是和索引里一样,mysql在查询的时候会自动调整顺序优化成和索引一样的顺序.

    上面是我个人的粗略理解,下面配上demo

    实例:现在我们想查出满足以下条件的用户id:
    mysql>SELECT `uid` FROM people WHERE lname`=‘Liu’ AND `fname`=‘Zhiqun’ AND `age`=26
    因为我们不想扫描整表,故考虑用索引。

    单列索引:
    ALTER TABLE people ADD INDEX lname (lname);
    将lname列建索引,这样就把范围限制在lname='Liu’的结果集1上,之后扫描结果集1,产生满足fname='Zhiqun’的结果集2,再扫描结果集2,找到 age=26的结果集3,即最终结果。

    由 于建立了lname列的索引,与执行表的完全扫描相比,效率提高了很多,但我们要求扫描的记录数量仍旧远远超过了实际所需 要的。虽然我们可以删除lname列上的索引,再创建fname或者age 列的索引,但是,不论在哪个列上创建索引搜索效率仍旧相似。

    2.多列索引:
    ALTER TABLE people ADD INDEX lname_fname_age (lame,fname,age);
    为了提高搜索效率,我们需要考虑运用多列索引,由于索引文件以B-Tree格式保存,所以我们不用扫描任何记录,即可得到最终结果。

    注:在mysql5.0之前中执行查询时(一个select里),只能使用一个索引,如果我们在lname,fname,age上分别建索引,执行查询时,只能使用一个索引,mysql会选择一个最严格(获得结果集记录数最少)的索引。

    不过在mysql5.0之后就可以在一个select中同时使用多个索引了,引出一个名词:索引合并

    什么是索引合并
    下面我们看下mysql文档中对索引合并的说明:

    The Index Merge method is used to retrieve rows with several range scans and to merge their results into one. The merge can produce unions, intersections, or unions-of-intersections of its underlying scans. This access method merges index scans from a single table; it does not merge scans across multiple tables.
    根据官方文档中的说明,我们可以了解到:

    1. 索引合并是把几个索引的范围扫描合并成一个索引。

    2. 索引合并的时候,会对索引进行并集,交集或者先交集再并集操作,以便合并成一个索引。

    3. 这些需要合并的索引只能是一个表的。不能对多表进行索引合并。

    怎么确定使用了索引合并
    在使用explain对sql语句进行操作时,如果使用了索引合并,那么在输出内容的type列会显示 index_merge,key列会显示出所有使用的索引。

    3.最左前缀:顾名思义,就是最左优先,上例中我们创建了lname_fname_age多列索引,相当于创建了(lname)单列索引,(lname,fname)组合索引以及(lname,fname,age)组合索引。

    注:在创建多列索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边。

    展开全文
  • 索引使用方法

    千次阅读 2019-02-15 17:01:49
    联合索引的最左匹配原则的成因 索引是建立得越多越好吗 如何定位并优化慢SQL 思路:先根据慢日志定位慢查询sql再使用explain等工具分析sql 方法: 使用show variables like '%quer%' 查询出Mysql关于查询的配置项...

    解决以下几个问题

    • 如何定位并优化慢查询sql
    • 联合索引的最左匹配原则的成因
    • 索引是建立得越多越好吗

    如何定位并优化慢SQL

    思路:先根据慢日志定位慢查询sql再使用explain等工具分析sql
    方法:

    1. 使用show variables like '%quer%' 查询出Mysql关于查询的配置项来。在这里插入图片描述
        long_query_time:10.00000 代表每次sql执行10秒就会判定为慢sql
        slow_query_log: 是否打开慢sql记录
        slow_query_log_file: 日志保存的地址
    
    1. 查询慢查询的数量
    show status like '%slow_queries%'
    

    在这里插入图片描述

    1. 参数设置

    打开慢查询

    set global slow_query_log = on;
    set global long_query_time = 1; 
    

    这个参数设置之后,要重新连接才会显示成功。 在这里设置的参数,重启数据库后会失效。

    1. explain解析sql

    在这里插入图片描述
    这几条比较关键
    id 代表执行顺序, select_type 代表是否为复杂查询 rows 代表查询了多少行。

    type: type代表检索等级all是最差的全表扫描。
    在这里插入图片描述
    extra:
    在这里插入图片描述

    详情可以看
    https://www.cnblogs.com/gomysql/p/3720123.html

    1. 调优
      在关键字上加索引就可以了。这里也要注意索引的命中率,索引的长度是对索引的命中率是有影响的。
      在这里插入图片描述
    • 联合索引, 也就是在栏位中选择两个字段。 创建成一个索引。在这里插入图片描述
      在使用联合索引的时候要注意最左原则,在创建索引的时候关键字是有顺序的,当在使用where条件查询的时候只有当使用最左边这个关键字或者两个关键字都使用的时候才会使用索引 。 否则就会直接全表扫描。
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      这样就会走全表扫描。

    最左匹配原则的成因
    在这里插入图片描述
    叶子节点的数据也就是一行数据要是有序排列的,需要先找到alice 才能在 判断下面的数据。

    展开全文
  • Mysql: mysql between 日期索引 索引问题-日期索引使用 表结构: dep_date  dep arr 联合索引: ind_coll_date_route (dep_date ,dep,arr) 这两天发现原来的查询效率慢了,使用explain 查看,居然没有使用索引, ...
  • Mysql 索引问题-日期索引使用

    万次阅读 2018-03-16 15:07:50
    最近在使用日期索引时,通过explain发现一直不走日期索引,在网上查询了下,发现使用过程中要注意以下情况:1、在查询数据条数约占总条数五分之一以下时能够使用索引,但超过五分之一时,则使用全表扫描了。...
  • MYSQL索引使用案例分析

    千次阅读 2018-06-28 14:28:14
    2、符合索引最左原则使用不当,导致索引失效 3、范围查找导致索引失效 4、order by使用不当,导致索引失效 4、group by使用不当导致索引失效 5、通配符like的使用不当导致索引失效 6、MYSQL 中!=,&...
  • 查看索引是否有效 1.未使用索引前 jinbo=# explain analyze select * from jinbo.student where score < 80 and score < 90 and sex = 1; QUERY PLAN ...
  • Greenplum索引使用

    千次阅读 2017-03-09 14:24:38
    合适的索引,能大幅度提升数据库表读的效率,但这里也不并不是说表上的索引越多越好。因此在数据库设计过程中,需要考虑创建索引的代价。在数据库中索引的维护代价约是表的3倍,并且数据表写和读两者不能兼得。如果...
  • 联合索引和单个索引使用注意事项

    千次阅读 2019-09-28 23:49:36
    通俗理解: 利用索引中的附加列,您可以缩小搜索的范围,但使用一个具有两列的索引 不同于使用两个单独的索引。复合索引的结构与电话簿类似,人名由姓和名构成,电话簿首先按姓氏对进行排序,然后按名字对有相同姓氏...
  • Oracle索引使用详解

    千次阅读 2018-08-11 13:29:55
    -- 索引:普通索引、唯一...使用索引的好处,就是检索效率快,和使用主键、rowid(物理地址) 差不多,使用主键检索的实质就是使用ROWID(物理地址) eg:  create unique index 索引名 on tablename(列名)  create i...
  • B-Tree索引详解及联合索引使用

    千次阅读 2018-04-04 15:04:16
    B-Tree索引原理详解部分转载自:http://zsuil.com/?p=1184一.B-tree索引详解B-tree索引(或Balanced Tree),是一种很普遍的数据库索引结构,oracle默认的索引类型(本文也主要依据oracle来讲)。其特点是定位高效、...
  • 转自:http://www.cnblogs.com/duanxz/p/5244703.html使用索引时,有以下一些技巧和注意事项:(1)越小的数据类型通常更好:越小的数据类型通常在磁盘、内存和CPU缓存中都需要更少的空间,处理起来更快。(2)简单的...
  • 前言: 在前面一文中,已经提到了三类常见的索引问题,那么问题来了,当系统出现这些问题时,该如何应对? 简单而言,需要分析现有系统的...对于索引不合理的情况:也要分析每个索引的定义,及其使用情况,确定索引
  • MySQL索引使用策略和优化

    千次阅读 2019-08-04 17:02:27
    那么在实际开发中,应该如何去使用索引以及如何去优化呢? 什么时候不应该使用索引索引并不都是有效的。有些场合,可能我们并不需要使用索引,甚至使用索引反而会影响性能。 查询很少用到的列 如果某些列在...
  • Measure Index Usage ...例如, 下面的聚合操作返回有关订单集合上的索引使用情况的统计信息: db.explain.aggregate( [ { $indexStats: { } } ] ) 结果: /* 1 */ { "name" : "c_1...
  • MyISAM是MySQL 5.5之前版本...InnoDB中非主键索引使用的是B-Tree数据结构,而主键索引使用的是B+Tree。 本文就是对这两种数据结构做简单的介绍。 1. B-Tree B-Tree不是“B减树”,而是“B树”。 这里参考了严...
  • Mysql组合索引使用和用法

    万次阅读 2018-12-31 17:30:51
    很多时候,我们在mysql中创建了索引,但是某些查询还是很慢,根本就没有使用索引!一般来说,可能是某些字段没有创建索引,或者是组合索引中字段的顺序与查询语句中字段的顺序不符。 看下面的例子: 假设有一张...
  • 联合索引使用规则

    千次阅读 2017-02-11 01:29:28
    假设某个表有一个联合索引(c1,c2,c3,c4)一下——只能使用该联合索引的c1,c2,c3部分 A where c1=x and c2=x and c4>x and c3=x B where c1=x and c2=x and c4=x order by c3 C where c1=x and c4= x group by c3,c2...
  • sql复合索引使用和注意事项

    千次阅读 2018-05-31 13:16:26
    复合索引的优点和注意事项 概念: 单一索引是指索引列为一列的情况,即新建... 同时有两个概念叫做窄索引和宽索引,窄索引是指索引列为1-2列的索引,宽索引也就是索引列超过2列的索引; 设计索引的一个重要原则就是能...
  • 为什么MySql索引使用B+树

    万次阅读 2019-01-23 09:53:45
    面试中我们经常碰到面试官问到数据库索引,问到索引就会问你索引的数据结构。类似这种数据结构对于普通程序员来说记住概念几天就忘了,而且概念不是每个人都能很好都理解,所以针对这一原因,我简单通俗都像大家讲解...
  • 索引类型和索引使用原则

    千次阅读 2009-10-16 19:48:00
    使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构, 与必须搜索表中的所有行相比,索引会帮助您更快地获得该信息。索引提供指向存储在表的指定列中的数据值的指针,...
  • mysql全文索引使用方法

    千次阅读 2016-08-11 15:06:33
    一、设置全文索引: 添加:ALTER TABLE table_name ADD FULLTEXT ( column); 删除:DROP INDEX index_name ON table_name; 注:mysql5.6版本以下只有myisam存储引擎支持全文索引,mysql5.6以上版本myisam和innodb...
  • MySQL中创建索引的两种方式 CREATE INDEX index_name ON ...1.使用CREATE创建索引必须提供索引名称,而ALTER方式可以不提供则MySQL会自动为你创建索引名称,如果想使用ALTER方式自定义创建索引名称,可以类似如...
  • 题目:给定一张mytable表,其中有4个字段(name,sex,birth,birthaddr),分别建立组合索引(name,sex,birth,birthaddr)where条件后边使用where name=xx and sex=xx或者name=xx and sex=xx,或者name=xx or sex=xx 或者...
  • 【MySQL】经验:索引使用场景

    千次阅读 2020-04-29 17:04:02
    一、适合用索引的场景 1、主键 主键一般为id等具有唯一性标识的字段,需要频繁查找、连接。InnoDB中会自动为主键建立聚集索引,即使没有定义主键,也会自动生成一个隐藏主键建立索引;MyISAM中不会自动生成主键。...
  • 1 避免使用字符串索引  字符串索引与数字索引有一些方面如果没做好会非常的慢。  事情的起因是线上日志发现的mysql慢查询。100万数据量的标准,联合查询全部走索引的情况下,尽然要600多毫秒。很不解,但是将...
  • B+树|MYSQL索引使用原则

    万次阅读 2016-06-19 11:10:58
    MYSQL一直了解得都不多,之前写sql准备提交生产环境之前的时候,老员工帮我检查了下sql,让修改了一下存储引擎,当时...一、存储引擎的比较注:上面提到的B树索引并没有指出是B-Tree和B+Tree索引,但是B-树和B+树的定义
  • SQL Server索引使用

    千次阅读 2013-01-04 17:26:04
    一、索引设计注意事项 (1)、检查WHERE条件和连接条件 当一条SQL语句提交时,查询优化器会根据表的信息查询最优的访问机制 1、优化器首先识别WHERE子句与连接条件中包含的列 2、优化器检索这些列上的索引 3、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,737,201
精华内容 694,880
关键字:

索引的使用