作者dumbiekbbx (吶喊的力量)
看板Database
標題[SQL ] Excel連線SQL Server效率問題
時間Fri Mar 24 10:16:42 2017
資料庫名稱:SQL Server
資料庫版本:2008 R2
內容/問題描述:
先前情提要一下,近期因同事業務需求,接手了一份與SQL Server連線的Excel檔
但我從來沒碰過SQL...(抖
因為每次開啟都需要花上2分半鐘以上的時間,咱老闆覺得效率太差,影響工作
而且開啟時,會不時與Server連動,造成程式停擺,影響日常業務
同事希望能改善此問題
開啟檔案時,"似乎"都在建構一個約10萬筆資料的表格(含有50幾個欄位)
說似乎是因為我對Excel連線SQL Server的方式不是很熟悉,不太確定是否這樣運作
建構完成後,使用者可以下SQL指令,接著便會從10幾個資料表中去找需要的資料
(如:上半季的資料),然後組該表格
這10幾個資料表有大有小,小的幾10筆資料大則60幾萬筆。
總而言之就是從每個Sheet去撈我要的東西,然後組成一個表格這樣
看了SQL寫法後,發現架構滿單純的:從10幾個資料表中去SELECT需要的欄位且改名
如此重複50幾次(有WHERE、CASE判斷)
之後就把資料表一個個INNER JOIN
想請問各位大大:
1. 是否因為資料量大,造成執行速度很慢?
2. 是否SQL寫法還有待調整?因為對SQL只認識了三天
不確定是否因為一連串的JOIN導致執行速度超慢
3. 還未確定是否已經設定INDEX。若有設定,還能從哪邊下手來改善?
感謝各位大大耐心看完問題,新手上路請多包涵!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.251.185.211
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Database/M.1490321805.A.955.html
1F:→ mike4994: 我是先寫好STORR PROCDURE 來讓EXCEL抓 ,希望對你有幫助 03/24 11:35
好的,我會研究看看Store procedure,感謝!
2F:→ terrybob: 我的話,工作表、資料表1對1,然後產index去設定欄位 03/24 16:56
3F:→ terrybob: 60萬筆很少啦…每個資料表要有互相對應的欄位,去對應 03/24 16:57
4F:→ terrybob: 這樣未來維護、跟提昇速度…等,才會比較好。 03/24 16:57
可否請教一個問題,如果像我這種情況,多久之內執行完畢才算正常?
5F:→ terrybob: 先建資料表吧…建完再看結構、欄位、sql是否要調整? 03/28 12:31
6F:→ terrybob: 沒有所謂多久內執行完算正常的,比之前更快才是目的 03/28 12:31
受教了!感謝大大指教
7F:推 longlongint: 一定要用excel? 03/28 23:06
Long大有更好的方式嗎?主要只是想要把資料整理出來,欄位多又雜
用Excel好像是比較親民的
不過我也很願意嘗試其他方法!
※ 編輯: dumbiekbbx (61.219.166.19), 03/29/2017 08:59:39
8F:推 longlongint: 沒有更好的建議 會想知道excel裡面sql指令&資料表 03/29 19:58
9F:→ longlongint: 的意義然後 自己從命令列下指令 03/29 19:58
10F:→ longlongint: 或是 如果資料沒有即時性 可以copy一份計算結果出 03/29 19:59
11F:→ longlongint: 來 03/29 19:59
12F:→ longlongint: 然後對大量資料做join的時候要小心一點吧...... 03/29 20:03
13F:→ longlongint: 但是你才碰三天 然後我不清楚你現場的狀況XD 03/29 20:03