資料型別與函式索引-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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料型別與函式索引-Oracle篇資料型別函式索引Oracle
- 資料型別與函式索引-MySQL篇資料型別函式索引MySql
- PostgreSQL:字元——型別及函式SQL字元型別函式
- PostgreSQL:數字——型別、運算子和函式SQL型別函式
- PostgreSQL:時間——型別、運算子和函式SQL型別函式
- PostgreSQL:陣列——型別、運算子和函式SQL陣列型別函式
- postgreSQL 索引(二)型別介紹SQL索引型別
- string型別資料的find函式型別函式
- PostgreSQL:網路地址——型別、運算子和函式SQL型別函式
- sql server 資料型別轉換函式SQLServer資料型別函式
- 【Postgresql】索引型別(btree、hash、GIST、GIN)SQL索引型別
- PostgreSQL批次改資料型別SQL資料型別
- 第 8 節:函式-函式型別與作用域函式型別
- MySQL基礎之----資料型別篇(常用資料型別)MySql資料型別
- TypeScript 函式型別TypeScript函式型別
- 【SQL】18 SQL NULL 函式、SQL 通用資料型別、SQL 用於各種資料庫的資料型別SQLNull函式資料型別資料庫
- 資料型別之字串篇資料型別字串
- 基本資料型別與字串型別資料型別字串
- 編號函式 自定義函式 集合型別 表的優化 資料傾斜函式型別優化
- 向PostgreSQL資料庫插入Date型別資料包錯SQL資料庫型別
- SSIS 資料型別 第二篇:變數的資料型別資料型別變數
- 常見python資料型別及其相對應的函式Python資料型別函式
- Java中的基本資料型別與引用資料型別Java資料型別
- golang基礎語法,定義函式型別 為已存在的資料型別起別名Golang函式資料型別
- Python 序列型別以及函式引數型別Python型別函式
- TypeScript入門1:註釋、變數常量、資料型別、函式TypeScript變數資料型別函式
- 可變資料型別不能作為python函式的引數資料型別Python函式
- MOGDB/openGauss的txid_snapshot 資料型別和相關函式資料型別函式
- Golang 中函式作為值與型別(轉載)Golang函式型別
- 胡說-JavaScript函式型別JavaScript函式型別
- 《MySQL 基礎篇》七:資料型別MySql資料型別
- 資料型別與約束資料型別
- 函式引數 引數定義函式型別函式型別
- 基本資料型別與引用資料型別,及記憶體分配資料型別記憶體
- [20190827]函式索引與選擇率.txt函式索引
- JavaScript 資料型別與型別判斷詳解JavaScript資料型別
- 基本資料型別與API引用型別的使用資料型別API
- 箭頭函式與普通函式區別函式