資料型別與函式索引-PostgreSQL篇

xuexiaogang發表於2022-01-10

前兩次是Oracle和MySQL的。今天來一個PostgreSQL的。

x=# \d

        List of relations

 Schema | Name | Type  |  Owner  

--------+------+-------+----------

 public | a    | table | postgres

(1 row)

 

x=# create table w (id int,a int,b varchar(10),c decimal(10,0),d date,primary key (id));

 

CREATE TABLE

x=# insert into w values (1,1,1,1,now());

x=# insert into w values (2,2,2,2,now());

x=# insert into w values (3,3,3,3,now());

x=# insert into w values (4,4,4,4,now());

x=# insert into w values (5,5,5,5,now());

x=# insert into w values (6,6,6,6,now());

x=# insert into w values (7,7,7,7,now());

x=# insert into w values (8,8,8,8,now());

x=# insert into w values (9,9,9,9,now());

x=# insert into w values (10,10,10,10,now());

如圖。


這裡遇到了一個和Oracle一樣的問題,就是10條資料的索引建立和沒建立一個樣。都不用索引。

其實PostgreSQL有的場景挺像Oracle,語法有不少和MySQL相近。感覺就是介於兩者之間的。

這個場景下看執行計劃其實是看不出來的。和Oracle一樣,對小數量級別不敏感。不屑一顧,10條資料的全表查詢也就順帶做了。


寫個儲存過程補1萬資料進去。

create or replace function us() returns

boolean AS

$BODY$

declare i integer;

  begin

  i:=1;

  FOR i IN 1..10000      LOOP

  INSERT INTO w (id,a,b,c,d) VALUES (i,i,i,i,now());

  end loop;

  return true;

  end;

$BODY$

LANGUAGE plpgsql;


可以看出寫入1萬條資料也就0.8秒左右。這是一個普通的虛擬機器。環境很普通。這個效能不錯了。

所以大家只要是正常使用資料庫現如今的資料庫單機就能滿足絕大多數應用。甚至不少NoSQL和訊息佇列等都不需要就可以滿足。甚至我覺得大部分公司都不具備大資料場景。即使具備,類似Oracle、PostgreSQL也能處理。

來看一下執行計劃。id=1如下圖。和預期一樣。a=1也和預期一樣。b=1這裡就不一樣了。直接報錯。說型別不對等。

遇到b='1'又是正確的了。

好了做到這裡我覺得基於前兩次的實驗很多就不用做了。因為型別不匹配是無法做下去的,那麼有些問題就不是問題了。

我用的是PostgreSQL14版本。這裡我還沒研究過是不是可以調整引數忽略資料型別不一致?也不知道有沒有。

但是我覺得這個預設的挺好的。就應該這樣。嚴謹是為了後續問題少。

我們直接到函式環節。可以看出如果不帶函式轉換還是出錯的。


建立函式索引以後,直接可以識別用到了。


可見天下資料庫基本原理差不多。當一個資料庫用不好使用,換其他資料庫,放心也用不好。

反過來一個資料庫玩的溜的、換其他的資料庫問題不是太大。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/637517/viewspace-2851585/,如需轉載,請註明出處,否則將追究法律責任。

相關文章