GP索引調優測試--基本篇


簡介

以下是一些基本的,以體現索引功能的測試。


測試數據生成

以下參照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,此時採用索引後時間反而延長!


總結

  • 對於查找特定條件的記錄,使用索引後查詢性能會大大提升
  • 篩選條件的稍微改變,都有可能影響索引的使用,當返回數據量過多時,此時往往不會走索引
  • 索引設置不當,可能反而延長查詢時間
發佈了148 篇原創文章 · 獲贊 39 · 訪問量 69萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章