PgSql 知識庫

洞玄巅峰發表於2024-03-28
--分頁offset 和limit 位置可以互換 不影響結果
select * from jinxudong.t_student offset 0 limit 2;
select * from jinxudong.t_student limit 2 offset 0;

--表明加別名 用as 不用as 都可以
select * from jinxudong.t_student as a  where a.id<23 limit 2 offset 0;
select * from jinxudong.t_student  a  where a.id<23 limit 2 offset 0;

--列明別名用as 和不用as 都可以 且都是小寫
select a.id as D,a.address dizhi from jinxudong.t_student a where a.id<33
and address='beijing'
limit 10;

--檢視執行計劃
explain
select a.id as D,a.address dizhi from jinxudong.t_student a where
a.id>42
and address like '%張%'
limit 10 offset 0;
--建立索引
create index index_address on jinxudong.t_student(address);

-- 檢視索引 直接表名 不用加schemas
select * from pg_indexes where tablename='t_student';

-- 刪除索引 必須有schemas
drop index jinxudong.i_address;

pgsql可以在Btree索引上指定運算子:text_pattern_ops、varchar_pattern_ops和 bpchar_pattern_ops,它們分別對應欄位型別text、varchar和 char,官方解釋為“它們與預設運算子類的區別是值的比較是嚴格按照字元進行而不是根據區域相關的排序規則。這使得這些運算子類適合於當一個資料庫沒有使用標準“C”區域時,被使用在涉及模式匹配表示式(LIKE或POSIX正規表示式)的查詢中

--建立索引
create index index_address on jinxudong.t_student(address varchar_pattern_ops);

--再查執行計劃就會走索引
explain
select a.id as D,a.address dizhi from jinxudong.t_student a where
a.id>42
and address like '張%'
limit 10 offset 0;


--select to_char(to_timestamp(1608018517000 / 1000),'yyyy');
-- 年-select to_char(to_timestamp(1608018517000 / 1000),'yyyy-MM');
-- 年-月-select to_char(to_timestamp(1608018517000 / 1000),'yyyy-MM-dd');
-- 年-月-日 時
select to_char(to_timestamp(1608018517000 / 1000),'yyyy-MM-dd HH24'); 對應JAVA 的“yyyy-MM-dd HH”
-- 年-月-日 時:分
select to_char(to_timestamp(1608018517000 / 1000),'yyyy-MM-dd HH24:MI');對應JAVA 的“yyyy-MM-dd HH:mm”
-- 年-月-日 時:分:秒
select to_char(to_timestamp(1608018517000 / 1000),'yyyy-MM-dd HH24:MI:SS');對應JAVA 的“yyyy-MM-dd HH:mm:ss”

--查詢某一天日期 不走索引(欄位帶函式)
explain
select * from jinxudong.t_student where
to_char(create_time,'yyyy-MM-dd')='2022-08-22';
--當前時間加一天
SELECT now()::timestamp + '1 day';
--某天字串加一天
SELECT to_timestamp('20220823','yyyyMMdd') + '1 day';
--查詢某一天走索引,小於明天大於今天

--查詢某一天走索引,小於明天大於等於今天
explain
select * from jinxudong.t_student where
create_time <(to_timestamp('20220822','yyyyMMdd') + '1 day') and
create_time >=to_timestamp('20220822','yyyyMMdd');

相關文章