oracle mysql查詢欄位數和準確資料量

2021-10-12 02:14:44 字數 3871 閱讀 5608

查詢oracle資料庫中每個表的資料量,查詢有多少行

一開始使用以下sql

select table_name, t.num_rows, t.last_analyzed  from tabs t order

by table_name desc

;

在oracle中,存在執行計畫不准的情況

last_analyzed是最後一次收集統計資訊的時間

num_rows是最後一次收集統計資訊後的行數

所以如果last_analyzed距離現在越遠,查到的資料量越不準確

現在我想要當前時間下,準確的資料量,所以需要對資料庫重新統計

使用以下sql ,拼接該使用者(資料庫)下所有表的"呼叫 收集統計資訊"的sql

select

'call dbms_stats.gather_table_stats(''使用者名稱''

,'''|| table_name ||

''')

;' as sqls

from user_tables a

where a.last_analyzed

and num_rows >=

0//可以根據實際繡球修改

order

by num_rows ;

exit

;

a.last_analyzed < sysdate and num_rows >= 0 可以根據實際情況修改,我需要當前準確的數值所以全部更新了

得到以下結果

全選 複製所有結果 執行這些call …語句

執行完畢後在呼叫一次剛開始的sql

select table_name, t.num_rows, t.last_analyzed  from tabs t order

by table_name desc

;

會發現表的num_rows和last_analyzed 變了,last_analyzed 變成了剛才呼叫收集統計資訊的時間,可以自行找幾張表進行驗證

-- 拿字段數

select table_name,

count

(column_name)

from user_tab_columns where table_name in

(select t.table_name from user_tables t)

group

by table_name order

by table_name desc

;

select

'call dbms_stats.gather_table_stats(''使用者名稱''

,'''|| table_name ||

''')

;' as sqls

from user_tables a

where a.last_analyzed

and num_rows >=

0//可以根據實際繡球修改

order

by num_rows ;

exit

;

把2拼接得到的sql批量執行

-- 拿資料量

select table_name, t.num_rows, t.last_analyzed from tabs t order

by table_name desc

;

在這裡插入**片

select

table_name,

count

(column_name)

from

information_schema.

columns

where

table_schema =

'資料庫名'

and table_name in

(select

table_name

from

information_schema.

`tables

`where

table_schema =

'資料庫名'

and table_type=

'base table'

)group

by table_name order

by table_name asc

;

and table_type=『base table』

是限制只查基本表的,檢視不查

剛開始使用table_rows

select

table_name,table_rows

from

information_schema.

`tables

`where

table_schema =

'enesys'

and table_type=

'base table'

order

by table_name asc

;

經過查詢得知,table_rows 只能預估某個表有多少資料量,和實際資料量有偏差的

由於我需要的是準確資料,所以此時我選擇拼接select count(*)的語句

select concat(

'select "'

, table_name,

'", count(*) from '

, table_schema,

'.', table_name,

' union all'

) exec_sql

from information_schema.

tables

where table_schema =

'資料庫名'

and table_name in

(select

table_name

from

information_schema.

`tables

`where

table_schema =

'資料庫名'

and table_type=

'base table'

)order

by table_name asc

;

拼接出查資料庫所有表的count(*)的sql 全選複製 去掉最後乙個union all,執行,得到準確的資料量

sql查詢字段連線

我有乙個需求是把2個字段拼接成乙個字段,如 user user id,user code,user name 查詢結果是 user code user name 在寫sql語句時用連線符 select user code user name codename from user 上面這種寫法是ora...

oracle通過字段型別查詢字段

有的時候我們需要在oracle中通過欄位名 字段型別 字段長度 字段注釋 表名來查詢具體的字段資訊。比如 昨天同事問我,咱們資料庫裡面有用過blob型別的嗎?我一時也想不起來具體哪個欄位或那張表用了blob型別。於是就用如下語句查詢庫裡面所有字段型別為blob。具體sql如下 select b.co...

mysql統計查詢並查詢字段

select count 1 ifvote d.voteitemid from tp votedetail d where d.fgsid and d.voteid 943306615853940736 and d.personid 011217033621526565 order by d.vot...