iT邦幫忙

0

多個有關MYSQL的相關問題

最近在幫公司設計一個資料庫出現一些問題想要請教各位大大
第一、請問一下MYSQL資料可以設計到當資料進來至資料表後會再自動將最新的一筆資料轉存到另一資料表嗎?
第二、我最近設計的資料庫是之前同事初設計的請問一下,主要內容是個分為很多的資料表,但是我想要請教的是,如果我同時在一個網頁連結查詢那麼多資料表,且各資料表資料量都很大會不會造成網頁開啟速度變慢。
第三、承上題,如果會可怎樣解決呢?

12
fillano
iT邦超人 1 級 ‧ 2011-05-22 03:13:51

針對你的第一個問題,看起來你有反正規化的需求?不然同一個資料為什麼要存兩次?

針對第二個問題,是要看你的需求。在同一個網頁用到好幾個資料表並沒有什麼問題,如果有效率的考量(例如網頁產生時間很久,或是資料庫連結不敷使用),那首先考量的應該是:

  1. index有沒有建好(有沒有建,是否符合查詢需求)
  2. 查詢時是否有做分頁,來限制每次查詢結果的數量(這個比較關鍵)

每個查詢用到好幾個資料表是正常現象,通常不會有太大的效能問題,除非是大量資料跑分析報表又沒建好index。不過這一類需求,比較不建議用real time的方式產生,最好讓系統排程來做。

看更多先前的回應...收起先前的回應...
fillano iT邦超人 1 級 ‧ 2011-05-22 03:19:40 檢舉

阿,忘了回第一個問題的做法:mysql5以後支援trigger

的確我是有大量資料的需求,之前我在做網頁設計的時候比較沒有考量到資料量的問題,結果就沿用先前所設計的資料表作連結查詢的動作,但是隨著此資料庫的各資料表的測試資料庫的資料越來越多的時侯,就會出現開啟網頁時變成越來越慢,所以現在解決的方案是將輸入頁面上面做了會同時輸入兩個資料表,一個是過去歷史資料的資料表,另一個就是永遠都只會是最新一筆資料的資料表,不知道這樣會不會讓網頁開啟速度變比較快一點。

fillano iT邦超人 1 級 ‧ 2011-05-26 15:32:05 檢舉

建議你先用explain來查看你的sql語句,看看有什麼效能問題。然後根據你的查詢需求來建index,看看是否能解決問題。

有效能問題時,上面絕對是第一個要嘗試的。另外,我是不知道你是需要做怎樣的查詢,才會嚴重影響頁面開啟時間,如果資料沒有分頁的話(limit),透過分頁也可以解決一些問題。

fillano大
第一個問題的解答,請參考這篇
落寞

fillano iT邦超人 1 級 ‧ 2011-05-29 10:44:55 檢舉

看起來他問的不是資料庫同步...

我是覺得還是要用trigger來做會比較快。

fillano iT邦超人 1 級 ‧ 2011-05-29 10:46:56 檢舉

不過如果只把兩筆資料寫入兩個表,怎麼會很慢?不知道他怎麼設計的...這個我有點不太明白XD

4
wiseguy
iT邦超人 1 級 ‧ 2011-05-26 14:27:32

其實你兩個問題都可以用 memcache 來解。
第一個問題,只需要把取資料的邏輯改為:

  1. memcache 裡有沒有資料?有就直接輸出,沒有再查資料庫
  2. 查出資料庫最新一筆,存到 memcache,再輸出
    寫資料的邏輯則改為:
  3. 寫入資料庫
  4. 刪除 memcache 的記錄
    這樣就不必多一個只存最新一筆的 table、多寫 trigger,還多一次 query。
    如果不會用 memcache,那就用 share memory 代替。

第二個問題,資料量大的 table 做 join,如果索引設定正確,速度一樣是秒殺的。但是不是有必要把大量資料往網頁送,就值得商確,得看user是不是需要一次看這麼資料,是不是可以分頁達成。假如是像匯出的功能,非得一次把所有資料 dump 到 client 端去,那就考慮在 php 程式開頭加個 ob_start("ob_gzhandler");
壓縮輸出會比較快。
若不是使用 php,就在 apache 加掛 mod_deflate 模組。

0
sten
iT邦新手 3 級 ‧ 2013-05-22 22:14:47

MySQL有個很方便的作法來限制每次顯示的筆數:例如,
select A.aaa,B.bbb
From A inner join B on A.ID = B.ID
Limit 0, 100

"Limit 開始列,結束列"若間距是100,每次就只取出100筆顯示於網頁。

希望對你有幫助!

0
WQ
iT邦新手 4 級 ‧ 2015-08-11 10:06:39

1,2都有高手回覆了
小弟直接回覆你第三點
加快速度建INDEX是必備的,還可以把常用資料建VIEW,可加快"查詢"速度!!

我要發表回答

立即登入回答