GP索引调优测试--基本篇

来源:互联网 发布:农村淘宝在哪里设置 编辑:程序博客网 时间:2024/06/03 19:40

    • 简介
    • 测试数据生成
    • 无索引测试
      • 测试1查找特定数据
      • 测试2查找特定范围的语句
      • 测试3排序测试
    • 有索引测试
      • 测试4查找特定数据
      • 测试5查找特定范围的语句
      • 测试6排序测试
    • 总结


简介

以下是一些基本的,以体现索引功能的测试。


测试数据生成

以下参照PostgreSQL生成测试数据 进行。

创建表

CREATE TABLE test(  id integer,  test integer)WITH (  OIDS=FALSE);ALTER TABLE test  OWNER TO postgres;

产生1500w个随机数(0-1000),插入到表中,

insert into test SELECT generate_series(1,15000000) as key, (random()*(10^3))::integer;

查看表的大小,大约为500MB。


无索引测试


测试1–查找特定数据

  • 测试语句:select count(*) from test where test=200
  • 执行计划:

    image1


测试2–查找特定范围的语句

  • 测试语句:select * from test where test >= 800
  • 执行计划:

    image2


测试3–排序测试

  • 测试语句:select * from test order by test
  • 执行计划:

    image3


有索引测试

在test字段,创建索引,创建完成后索引大小约为300MB。

CREATE INDEX test6  ON test  USING btree  (test);

测试4–查找特定数据

  • 测试语句:select count(*) from test where test=200
  • 执行计划:

    image4

仅需12ms,相比较未创建索引时的1.8s,有了极大提升。


测试5–查找特定范围的语句

  • 测试语句:select * from test where test >= 800
  • 执行计划:

    image5

显示走了索引,耗时1.9s,与未创建索引所需2.0s相比,差别不大。

但调整测试语句:select * from test where test >= 200,查看执行计划

image5-2

并未走索引,是因为在返回记录过多的情况下,此时使用索引查取记录的开销(硬盘随机I/O)会很大,
所以仍然采用顺序浏览的方式获取记录。


测试6–排序测试

  • 测试语句:select * from test order by test
  • 执行计划:

    image6

相比较未创建索引时的24s,此时采用索引后时间反而延长!


总结

  • 对于查找特定条件的记录,使用索引后查询性能会大大提升
  • 筛选条件的稍微改变,都有可能影响索引的使用,当返回数据量过多时,此时往往不会走索引
  • 索引设置不当,可能反而延长查询时间
1 0
原创粉丝点击