資料型別與函式索引-PostgreSQL篇
前兩次是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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料型別與函式索引-MySQL篇資料型別函式索引MySql
- 資料型別與函式索引-Oracle篇資料型別函式索引Oracle
- PostgreSQL:字元——型別及函式SQL字元型別函式
- PostgreSQL:數字——型別、運算子和函式SQL型別函式
- PostgreSQL:時間——型別、運算子和函式SQL型別函式
- PostgreSQL:陣列——型別、運算子和函式SQL陣列型別函式
- postgreSQL 索引(二)型別介紹SQL索引型別
- PostgreSQL:網路地址——型別、運算子和函式SQL型別函式
- PostgreSQL批次改資料型別SQL資料型別
- 【Postgresql】索引型別(btree、hash、GIST、GIN)SQL索引型別
- string型別資料的find函式型別函式
- sql server 資料型別轉換函式SQLServer資料型別函式
- Sql Server 資料型別 轉換 函式SQLServer資料型別函式
- Sql Server資料型別轉換函式SQLServer資料型別函式
- 第 8 節:函式-函式型別與作用域函式型別
- java 方法修改主函式裡基本資料型別和引用資料型別的區別Java函式資料型別
- Sql Server系列:資料型別轉換函式SQLServer資料型別函式
- CHAR型別函式索引導致結果錯誤型別函式索引
- H2資料庫函式及資料型別概述資料庫函式資料型別
- Sql Server函式全解(3):資料型別轉換函式和文字影象函式SQLServer函式資料型別
- Sql Server函式全解(三)資料型別轉換函式和文字影像函式SQLServer函式資料型別
- PHP:與型別有關的函式PHP型別函式
- MySQL基礎之----資料型別篇(常用資料型別)MySql資料型別
- MySQL系列:資料型別、運算子及函式(5)MySql資料型別函式
- sqlite 資料庫 支援的資料型別 以及常用的函式SQLite資料庫資料型別函式
- 資料型別之字串篇資料型別字串
- 基本資料型別與字串型別資料型別字串
- TypeScript 函式型別TypeScript函式型別
- 【SQL】18 SQL NULL 函式、SQL 通用資料型別、SQL 用於各種資料庫的資料型別SQLNull函式資料型別資料庫
- PostgreSQL學習手冊(常用資料型別)SQL資料型別
- 資料庫中Date型別的計算 DATEDIFF() 函式資料庫型別函式
- SSIS 資料型別 第二篇:變數的資料型別資料型別變數
- 編號函式 自定義函式 集合型別 表的優化 資料傾斜函式型別優化
- 資料庫索引型別及實現方式資料庫索引型別
- Java中的基本資料型別與引用資料型別Java資料型別
- 【開發篇plsql】plsql資料型別(一) 集合型別SQL資料型別
- 【開發篇sql】 條件和表示式(一) 資料型別SQL資料型別
- golang基礎語法,定義函式型別 為已存在的資料型別起別名Golang函式資料型別