資料庫效能

by adonis 30. 十二月 2015 16:06

作    者:楊先民
審    稿:張智凱

 

前言



前一陣子,有個學員寄信問我資料庫的一些語法怎麼撰寫,我回信之後才發現其實這個和資料庫的效能有一些相關性,特別寫一篇雜誌文章來建議各位想要效能調教的朋友,效能調教你自身對資料庫的自主性一定要夠,不然是無法調教成功的。

 

別人寫好的套裝軟體

凡是寫信給我的學員都得要有一個心理準備,就是你的問題隨時會變成雜誌的文章內容,不過我會改一些數據,畢竟實務上很多的情境不可能在上課中一個個介紹,有時是 CASE BY CASE的情況,但可以肯定的是,如果你沒有辦法更動資料庫的結構,或是這個程式根本是外包甚至套裝軟體,你想要對它效能調教就是三個字:「不可能」。

這次這位學員提出的問題,是某系統商客制化好的 ERP系統,很多公司都應該可能用過某些系統商寫好的 ERP系統,這個就是我所歸類的:很難效能調教的類型。

為什麼?因為資料庫不是你設計的,程式不是你寫的,你動了 A,可能系統就不能動了,或是即便知道這樣的資料庫設計很爛,但你也一點辦法也沒有,根本無力也不知從何改起。

所以我通常都要求學員,效能調教就是你可以完全控制這個系統,不然你能夠做的事情非常有限,甚至是無法做。
情境大概是這樣子的,資料表結構長這個樣子(我已經改過資料表名稱了,所以請不要對號入座):

image

其實需求很簡單,但是你會先被資料庫結構煩死,我大概花了好幾天才慢慢搞動這個資料庫結構之間的關係,畢竟我完全不知道情境,我只被告知有這幾個資料表,以及想要查出資料的結果…。

所以說,誰最能做調能調效,就是你自己,你最了解公司情境,由你負責效能調教是最好的,至於一些顧問啦,或是像我一樣的講師,除非一開始就是在你們的 team裡工作,熟悉裡面的情境,不然要他們做效能調教,花的時間,肯定比你來的久。

講師與顧問,有的是專業的知識,但是對你們公司的情境是一無所知,要他們解題難免解了A,但又有 B的問題出現。

這題其實一開始問的是圖左上角,他希望最後能夠得到的結果是如左上角一樣:

image

TOBBB我們稱為「報價單」資料表,希望在查報價單時,能夠把最近一筆交易日取出,放在資料旁邊。

看起來簡單對嗎?我第一個想到的是使用自訂函式來解決,事實上也確實用這個方式來解決,但是問題來了,訂單來源可能有兩個:一個是合約訂單,也就是 TOXXX,另一個則是報價單,也就是 TOBBB。

其實光看這個資料庫設計,就讓人非常的不滿,現在的資料表名稱怎麼訂的這麼隨便? TOBBB是什麼意思? TOXXX又是什麼意思?

取這種類似代碼的資料表,簡直就是自取滅亡啊,我不客氣的說!當初我以為是那個學員設計的,沒想到是 ERP系統廠商設計的,這讓人實在怒火中燒…麻煩有在幫別人設計 ERP系統的設計師,不要設計這麼奇怪的資料表名稱好嗎?

如果以微軟的建議,一個好的資料表名稱,可以用駱駝式的方式命名,資料表使用單數不用複數,例如下面的資料表名稱:

Product.ProductCategory

而不是像本例一樣,弄一個讓人看不懂的代號,我想設計資料庫的人可能不希望用戶端的人自己亂搞資料庫吧?這是我所發現的資料庫設計上的第一個問題。

第二個問題則是一般設計資料庫最常發生的複合主索引鍵的問題。

以本例而言,如果是寫成 SQL句子的關聯,會是這樣

select top 100 * from TODDD inner join TOCCC
on TC001 = TD001 and TC002 =TD002
left join TOXXX on TX001= TD017 and TX002 = TD018 and TX003 = TD019
left join TOBBB on
TB001 =TX017 and TB002 =TX018 and TB003 = TX019

以及

select top 100 * from TODDD inner join TOCCC
on TC001 = TD001 and TC002 = TD002
left join TOBBB on
TB001=TD017 and TB002=TD018 and TB003=TD019

你看出了什麼問題了嗎?

這個關聯竟然要三個欄位的 join主鍵與外部鍵,這樣的效能,會好才有問題,所以即便我最後有使用自訂函式讓他可以把最近一天的日期取出來,可以預期的是效能不會好。

那麼,以本例該怎麼辦?

如果你的資料表完全不能改,那麼本題無解,你做再多效能調效的工作都是無解,因為即便你替外部鍵的三個欄位設定索引都是無效的。

所以,如果你可以在這幾個資料表上增加一個替代鍵,欄位使用自動編號,也就是如下圖的 AAA與 BBB這樣的欄位。

image

這樣一來,你的 SQL指令就可以改寫成:

select top 100 * from TODDD inner join TOCCC
on TC001 = TD001 and TC002 =TD002
left join TOXXX on TX001= TD017 and TX002 = TD018 and TX003 = TD019
left join TOBBB on
AAA=BBB

類似這樣的撰寫方式,以減少多個複合主索引與外部鍵所造成的關聯上效能問題,這也是沒有辦法中的辦法了。


結論

常常看到有些人對於效能調教的問題認知太過於覺得簡單化,事實上如果你公司的資料庫或是程式你一點也沒有辦法修改,那麼你是無法效能調教的,甚至精確的說,除非你們公司是想要對系統做下一個版本,不然甚至連上效能調效課程的需要可能都沒有,因為你只會得到一堆觀念,然後上完課之後依舊對著舊系統無法做任何的調教工作。

Tags:

評論 (57) -

cours de theatre
cours de theatre United States
2017/9/30 下午 10:22:43 #

Thanks for the post.Really thank you! Great.

回覆

buy hacklinks
buy hacklinks United States
2017/10/9 下午 01:27:00 #

Thank you ever so for you blog post.Much thanks again. Awesome.

回覆

kamagra tanio
kamagra tanio United States
2017/10/9 下午 03:04:47 #

Really enjoyed this post.Really looking forward to read more. Great.

回覆

can ho bien vung tau
can ho bien vung tau United States
2017/10/9 下午 05:21:35 #

Im grateful for the blog.Much thanks again. Much obliged.

回覆

solarmovie
solarmovie United States
2017/10/10 下午 07:09:46 #

Really appreciate you sharing this article.Much thanks again. Great.

回覆

Sterling Businesses Ltd
Sterling Businesses Ltd United States
2017/10/10 下午 09:16:24 #

Im grateful for the blog. Cool.

回覆

pirater un compte facebook
pirater un compte facebook United States
2017/10/10 下午 11:35:03 #

Looking forward to reading more. Great article post.Really thank you! Really Great.

回覆

from this source
from this source United States
2017/10/14 下午 02:40:39 #

Thanks for the article.Really thank you! Really Great.

回覆

dragon city hack no root
dragon city hack no root United States
2017/10/15 下午 02:42:21 #

Say, you got a nice post.Much thanks again. Awesome.

回覆

omega xl
omega xl United States
2017/10/15 下午 07:24:34 #

I really liked your blog post.Much thanks again. Keep writing.

回覆

find more information
find more information United States
2017/10/17 下午 01:59:57 #

Thanks for the blog post. Great.

回覆

sletrokor review
sletrokor review United States
2017/10/17 下午 07:32:22 #

Fantastic post.Thanks Again. Fantastic.

回覆

officetel
officetel United States
2017/10/19 上午 04:54:54 #

Thanks a lot for the blog post.Really thank you! Fantastic.

回覆

sex pills
sex pills United States
2017/10/19 上午 06:36:38 #

Thanks again for the post.Really looking forward to read more. Really Cool.

回覆

browse this page
browse this page United States
2017/10/19 下午 05:25:27 #

Really informative post.Thanks Again.

回覆

pure slim 1000 review
pure slim 1000 review United States
2017/10/20 上午 02:56:03 #

Thanks a lot for the blog article.Really thank you!

回覆

Osimi Sea View
Osimi Sea View United States
2017/10/21 上午 02:38:36 #

A round of applause for your article.Really looking forward to read more. Much obliged.

回覆

carte grise en ligne
carte grise en ligne United States
2017/10/21 上午 06:16:34 #

This is a great resource. Ill visit again.

回覆

kassa
kassa United States
2017/10/21 下午 04:41:08 #

Thank you ever so for you blog article. Cool.

回覆

website designing company in Delhi India
website designing company in Delhi India United States
2017/10/24 上午 09:43:06 #

wow, awesome blog article.Much thanks again. Fantastic.

回覆

osimi vung tau
osimi vung tau United States
2017/10/28 上午 09:27:38 #

I truly appreciate this post. Really Great.

回覆

EZ Battery Reconditioning
EZ Battery Reconditioning United States
2017/10/30 上午 08:19:52 #

Thanks for sharing, this is a fantastic article.Thanks Again. Will read on...

回覆

lepszy plock
lepszy plock United States
2017/10/30 下午 04:05:31 #

Great blog post.Really thank you! Much obliged.

回覆

life leadership
life leadership United States
2017/11/1 上午 08:34:25 #

Major thanks for the post.Thanks Again. Much obliged.

回覆

phenocal
phenocal United States
2017/11/1 下午 03:59:19 #

Hey, thanks for the post.Really looking forward to read more. Great.

回覆

phentaslim review
phentaslim review United States
2017/11/3 下午 02:17:10 #

Looking forward to reading more. Great article.Thanks Again. Will read on...

回覆

Fantastic article post.Really thank you! Really Great.

回覆

sciatica pain headaches
sciatica pain headaches United States
2017/11/15 上午 10:28:20 #

I value the article.Much thanks again. Much obliged.

回覆

avocat criminel montreal
avocat criminel montreal United States
2017/11/16 下午 09:02:05 #

Really enjoyed this blog post.Thanks Again. Want more.

回覆

I am so grateful for your blog.Really looking forward to read more. Keep writing.

回覆

swimwear
swimwear United States
2017/11/24 上午 12:36:20 #

Really enjoyed this blog article. Cool.

回覆

Chad Boonswang and Jeffrey Goodman
Chad Boonswang and Jeffrey Goodman United States
2017/11/26 下午 08:40:42 #

Great, thanks for sharing this post.Thanks Again. Will read on...

回覆

Chad Boonswang SEO
Chad Boonswang SEO United States
2017/11/27 上午 02:51:44 #

Major thankies for the blog article. Great.

回覆

porno
porno United States
2017/12/1 下午 07:21:09 #

I really liked your blog article.Much thanks again. Really Cool.

回覆

Business Credit For Small Business Loan
Business Credit For Small Business Loan United States
2017/12/3 上午 07:31:42 #

Enjoyed every bit of your blog article.Really looking forward to read more. Great.

回覆

mobil porn
mobil porn United States
2017/12/5 下午 12:23:05 #

Very good blog.Really thank you! Fantastic.

回覆

Very neat blog article.Really thank you! Cool.

回覆

Thanks again for the blog article.Much thanks again. Cool.

回覆

Deon Hawking
Deon Hawking United States
2017/12/14 下午 12:01:59 #

Very informative article.Really looking forward to read more. Great.

回覆

visit homepage
visit homepage United States
2017/12/14 下午 06:58:30 #

I loved your article.Much thanks again. Great.

回覆

Christmas
Christmas United States
2017/12/15 上午 01:32:56 #

Very good article. Much obliged.

回覆

canon driver software
canon driver software United States
2017/12/16 下午 08:36:15 #

I value the article post.Thanks Again. Keep writing.

回覆

tips lose weight
tips lose weight United States
2017/12/17 上午 03:00:17 #

I really liked your blog post.Thanks Again. Cool.

回覆

Thanks a lot for the blog post.Really looking forward to read more. Really Great.

回覆

PMO
PMO United States
2017/12/17 下午 08:11:10 #

Thanks-a-mundo for the article post.Thanks Again. Fantastic.

回覆

driver canon
driver canon United States
2017/12/23 上午 06:51:43 #

I appreciate you sharing this blog.Really looking forward to read more. Will read on...

回覆

I appreciate you sharing this blog.Really thank you! Keep writing.

回覆

driver hp
driver hp United States
2017/12/25 下午 06:52:56 #

Very informative blog article.Much thanks again. Keep writing.

回覆

آینه بغل
آینه بغل United States
2017/12/26 上午 06:43:51 #

Thanks so much for the blog.Really thank you! Cool.

回覆

SOCCER HIGHLIGHTS
SOCCER HIGHLIGHTS United States
2017/12/26 下午 02:36:17 #

Very neat blog post.Really looking forward to read more.

回覆

Epson drivers
Epson drivers United States
2018/1/3 下午 01:32:23 #

Muchos Gracias for your article post.Thanks Again. Really Great.

回覆

mobile slots real money
mobile slots real money United States
2018/1/5 上午 12:27:22 #

Wow, great article.Thanks Again. Much obliged.

回覆

hp printer driver
hp printer driver United States
2018/1/5 下午 08:24:35 #

Thanks again for the article post.Thanks Again. Cool.

回覆

FBA
FBA United States
2018/1/6 下午 12:28:38 #

I really enjoy the blog.Really thank you! Awesome.

回覆

colocation miami
colocation miami United States
2018/1/10 下午 01:10:19 #

Thanks for sharing, this is a fantastic article.Much thanks again. Cool.

回覆

JAluWkznbq
JAluWkznbq United States
2020/9/17 上午 09:37:26 #

13752 620891The best and clear News is very much imptortant to us. 773056

回覆

新增評論




  Country flag
biuquote
  • 評論
  • 線上預覽
Loading






NET Magazine國際中文電子雜誌

NET Magazine國際中文電子版雜誌,由恆逸資訊創立於2000,自發刊日起迄今已發行超過500篇.NET相關技術文章,擁有超過40000名註冊讀者群。NET Magazine國際中文電子版雜誌希望藉於電子雜誌與NET Developer達到共同學習與技術新知分享,歡迎每一位對.NET 技術有興趣的朋友們多多支持本雜誌,讓作者群們可以有持續性的動力繼續爬文。<請加入免費訂閱>

月分類Month List