为什么你必须掌握数据字典?

共 1759字,需浏览 4分钟

 ·

2020-08-25 11:52

点击蓝色“有关SQL”关注我哟

加个“星标”,天天与8000人一起快乐成长

数据字典,号称是数据中的数据。

在我看来,数据字典就是一个大管家。小到一根针,大到一个保姆,管家不仅要记录得分毫不差,还要随时快捷地找到他想要的东西或者人。

一个数据库应用开始的时候,需求还不旺盛,很多功能还不到时候开发,所以可能有2,30张表。可以是人物表,地点表,时间表,活动表等等。此时,我们记得住这些表,某个数据在哪里,信手捏来。

但,假设业务开展的特别好,产品特别给力,运营也很奥里给,业务活动噌噌往上涨,各种花哨功能也上来了,比如618,双十一,团购等等,各种表是加了又加,一时间猛增到了大几百张表,如果说表名靠命名格式,还能猜得出来,那么字段名是肯定没法猜准了。

那你有没有想过,数据库是怎么记住这些表的呢?对,就是靠数据字典。

有了它,我们记不住精确的表名,没关系,一条语句就能搞定:

SELECT NAME 
FROM sys.tables 
SELECT * 
FROM ALL_TABLES

怎么查某张表的字段名呢?

SELECT NAME
FROM sys.columns 
SELECT * 
FROM ALL_TAB_COULUMNS

有同学就会问,知道这些有啥好处呢,嗯,好处多着呢,慢慢来看真香部分:

更新部分字段

比如很多信息系统,为了各种原因,选择只传输部分字段来做更新。如果不知如何利用字典表,那么我猜,开发很可能会自己维护一张字段表,逐一去对比字段,然后更新。

table A( a int, b int, c int)

前端传进来的参数是个二维表,类似下面这样:

@updateColumns(Key,Value)

在这份表结构中,可以传多个字段的更新值,也可以只传一个。

这个时候,通常我们会维护一张字段表,类似这样:

table:columns_mapping
(TableName,TableColumn)
---------  ------------
A           a
A           b
A           c

这样,每次通过参数@updateColumns结构传进来的字段,就能通过Join,准确知道。比如 @updateColumns的参数是这样的值:

Key         Value
----        -----
a           10001
c           20001

这样,程序就能知道,只要更新 a 和 c 字段的值即可。

上面这个方法呢,有个不高级的地方,我们每次增加一个字段,都要去这个表里,维护一下,而且对这张表也 要做严格的安全限制。

因此,使用字典表,sys.columns 就一劳永逸了。数据字典表是绝对安全的,而且强数据一致性。

SELECT col.name AS ColumnName 
FROM sys.columns col 
INNER JOIN sys.tables tab 
    on col.object_id = tab.object_id 

就能抓到所有指定表的字段名,不用人工维护,还安全。

查看统计值

经常碰到开发通过 count(*) 去统计一张表的记录数。这种做法,最大缺点就是费时,还能容易锁表,造成应用系统的堵塞和崩溃。

幸好数据字典帮我们做好统计值。每张表有多少记录,每个表被多少存储过程应用等等。

针对上面的案例,我们只要查下字典表,就能秒出结论:

SELECT * 
FROM sys.partitions

当然,这种解决方法也有缺陷,在一个正常运行的系统中,不会即时更新表的统计值,那样造成压力更大。往往在窗口维护期间,一些费时的统计值更新才会由维护计划去执行。

数据字典,是资深开发的倚天剑,轻量但高效,推荐你掌握!



--完--





往期精彩:


本号精华合集(二)

如何写好 5000 行的 SQL 代码

如何提高阅读 SQL 源代码的快感

我在面试数据库工程师候选人时,常问的一些题

零基础 SQL 数据库小白,从入门到精通的学习路线与书单









浏览 51
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报