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

有关SQL

共 1759字,需浏览 4分钟

 · 2020-08-25

点击蓝色“有关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 数据库小白,从入门到精通的学习路线与书单









浏览 44
点赞
评论
收藏
分享

手机扫一扫分享

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

手机扫一扫分享

举报