Mysql 差集與 Database Tuning

最近有遇到一個在某些表格會插入失敗的實例,問題是知道該如何解了,但是我們想要知道現在 DB 中的差異,於是乎遇到了一些問題,把這些東西記錄一下。

目前的狀況是兩個 DB 的 record count 一個是KK級的,一個是10K級的
sql 中要找兩個 table 裡面的差集,第一個想法是用
SELECT cola FROM table1 WHERE cola NOT IN (SELECT colb FROM table2);
但是看起來整個效能還滿差的,而且還咬住了兩個table 讓別的 query process 無法拿資料,於是乎又在網路上查了一下,看到了另外一個解法:
SELECT cola FROM table1
EXCEPT
SELECT colb FROM table2;



看起來非常殘念 mysql 會跟我說 EXCEPT 有問題,也許是 mysql 不支援這樣的語法
接下來又查了一會兒,找到了下面的語法SELECT cola FROM table1
LEFT JOIN table2 ON cola=colb
WHERE colb IS NULL

用這種判斷 is null 的方式來找出差集,可是這樣又殘念了,因為效能還是很差,丟進去 5 分鐘都跑不出來答案,後來只好想說,既然會咬住 table,那用 create temporary table 的方式,讓這個 query process 不要咬住 table,底下是我用的語法:
CREATE TEMPORARY TABLE table3 SELECT cola FROM table1;
CREATE TEMPORARY TABLE table4 SELECT colb FROM table2;
SELECT * FROM table3 where cola NOT IN (SELECT colb FROM table4 );
結果這樣子跑了10分鐘都跑不出來,我怕再下去即使跑出來也因為 connection timeout 而看不到結果,浪費了 cpu 資源,而且我還有要把兩個 table 反過來查詢的要跑,於是又找了一下看有沒有更有效能的方式,找了半天,有人說建 index 會快很多,於是我又改了一下我的語法:CREATE TEMPORARY TABLE table3 SELECT cola FROM table1;
CREATE UNIQUE INDEX idx_cola ON table3 (cola);
CREATE TEMPORARY TABLE table4 SELECT colb FROM table2;
CREATE UNIQUE INDEX idx_colb ON table4 (colb);
SELECT * FROM table3 where cola NOT IN (SELECT colb FROM table4 );

和上面最大的不同是多了兩個 unique index 條件,結果這次命令跑的飛快,大約5秒就有答案了,原來加了index 會有這麼好的效果@@
反正我們平常 query 的語法多半是以 cola/colb 為 where, 加上了這個 index 不知道會不會讓 query 的效能變好一點

繼續閱讀...

adb over tcpip

adb over tcpip, 當 device 需要充電的時候這個還滿有用,作法也很簡單,筆記一下

1. 先連 wifi 並透過 settings 找到 wifi 的 ip ex: 192.168.1.2
2. 先連 usb 並且輸入

adb tcpip 5555


3. 拔掉 usb 並輸入

adb connect 192.168.1.2:5555

然後 adb 就可以透過 tcpip 接傳資料了

4. 要取消的時候輸入

adb usb

就可以了

繼續閱讀...

[筆記]解決 ubuntu 英文介面中文字非常醜的問題

ubuntu 中使用英文介面的時候,所有有中文字的看起來都很醜,
無論是網頁還是系統中的選單,但是切成中文介面的時候,中文字又都很漂亮
想要用英文的介面,但又被那個醜到不行的中文字弄到用不下去
其實要有漂亮的中文字還滿簡單的


Step 1. 安裝中文字型,在 language support -> Install/Remove Languages 先把 Chinese(triditional) 打勾,讓系統自己安裝中文字型和一些語言 support.(映像中 10.10 不用,但 11.04我發現裝好後連中文字型沒辦法顯示,於是我就先裝了免得麻煩)

Step 2. 在終端機輸入指令
$ cd /etc/fonts/conf.d
$ sudo ln -s ../conf.avail/69-language-selector-zh-tw.conf

然後,你就會發現各位師兄弟歸位中文字變漂亮了

繼續閱讀...

修復被 windows 幹掉的 grub (ubuntu 10.04)

先安裝好 winsows 後再安裝 ubuntu, ubuntu 的 grub 預設會寫到 mbr 裡,所以可以做 windows 和 linux 的雙重開機,可是 windows 常常需要重新安裝,重新安裝 windows 的時候 mbr 一定會被 windows 吃掉,這時候只要修復一下即可,步驟如下

用 ubuntu 的光碟開進 live cd 模式
開啟終端機輸入

sudo -i
mkdir mnt
mount /dev/sda2 mnt
mount --bind /dev/ mnt/dev
mount --bind /proc/ mnt/proc
chroot mnt/
grub-install /dev/sda

重開機即可

p.s ubuntu 的 / 裝在 sda2 裡,/boot 也在 sda2,如果 boot 有獨立的 partition 記得在 chroot 前要先 mount 起來。

繼續閱讀...

[筆記] ubuntu 9.10 下啟用小紅點中鍵滾動頁面的功能

用過小紅點的人都知道,按住中鍵再上下推動小紅點,畫面就會往上或往下scroll,剛灌好 ubuntu 9.10 的時候,這個功能並沒有被啟動,感覺小紅點就像是斷了一支腳一樣,後來爬了一下文,發現果真是有辦法讓中鍵可以活過來的。

作法滿簡單的,在 /etc/hal/fdi/policy/ 下放一個名為 "mouse-wheel.fdi" 檔案,

sudo joe /etc/hal/fdi/policy/mouse-wheel.fdi

其內容為

<?xml version="1.0" encoding="UTF-8"?>
<deviceinfo version="0.2">
<device>
    <match key="info.product" string="TPPS/2 IBM TrackPoint">
      <merge key="input.x11_options.EmulateWheel" type="string">true</merge>
      <merge key="input.x11_options.EmulateWheelButton" type="string">2</merge>
      <merge key="input.x11_options.XAxisMapping" type="string">6 7</merge>
      <merge key="input.x11_options.YAxisMapping" type="string">4 5</merge>
      <merge key="input.x11_options.ZAxsisMapping" type="string">4 5</merge>
      <merge key="input.x11_options.Emulate3Buttons" type="string">true</merge>
    </match>
  </device>
</deviceinfo>

然後重開機即可

來源


繼續閱讀...

ubuntu 8.04 下 firefox-pgo 的安裝與中文設定

最近 Flash 怪怪的,有些有圖層的只會有底圖顯示,上面的圖層卻沒有了,只好上網找解法,翻來翻去不小心看到了 firefox-pgo 版,號稱效能很讚的,就先抓下來試試看。

以下是安裝方式,中文化和圖層問題的解決紀錄,

1. 先去 http://www.ubuntu-tw.org/modules/newbb/viewtopic.php?topic_id=17045&viewmode=flat&order=ASC&type=&mode=0&start=0 下載 .deb 檔,我是下載 3.5.3 的

2. 移除本來安裝的 firefox

3. 用 dpkg 安裝 指令是
sudo dpkg -i firefox-pgo-3.5.3-2-prescott-O3.deb

4. 將 firefox-pgo 設成預設的
cd /usr/bin/; sudo ln /usr/lib/firefox-pgo/firefox

到這邊 firefox-pgo 已經安裝好了,再來就是中文化

1. 用 firefox 開啟 http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.5.3/linux-i686/xpi/zh-TW.xpi,並且安裝

2. 重開後還是英文,只需要設定一下即可,只要再網址列上打 about:config 然後把general.useragent.locale的值改為 zh-TW 再重開就可以了


flash 問題的解決方式:
其實 flash 是因為安裝了 flash player 10 的緣故,只要安裝預設的 flash player 9 就好了,指令如下:
sudo apt-get install flashplugin-nonfree

這樣就把 flash 的問題解決了,至於說原本再 ubuntu 8.04 上會遇到方塊字和開兩個以後就沒聲音的問題暫時也沒遇到,等遇到了再說吧。

繼續閱讀...

移除被標示為 "rc" 的 package

在 ubuntu 下,安裝程式多半只要用 apt-get install 即可安裝,
但是移除的時候,沒有用 apt-get purge 就不會將安裝的 package 的設定檔移除
這時候用 dpkg -l 就會發現有一堆開頭被標示為 "rc" 的 package,
要移除他們,簡單的方式就是下

dpkg -l | grep ^rc | cut -d' ' -f3| xargs sudo dpkg -P

就可以把所有標示成 "rc" 的 package 移除了
繼續閱讀...

我真的服了你了--黃色鬼屋

前兩天,黃色鬼屋在做會員招待會,這次的招待會有一台 Honeywell 的空氣清淨機還賣的滿便宜的,想說反正之前一直想買買不下手,就趁這次便宜入手吧.....
入手之前跑了很多黃色鬼屋,竟然都賣到缺貨,心理想說,那上網碰碰運氣好了....



那天晚上剛開始先把黃色鬼屋賣的網頁找出來,沒想到也缺貨,想說先找一下網路上其他人的開箱文,順便跟另外一台比較一下,在網路上晃一晃,晃的途中就突然發現黃色鬼屋那一台空氣清淨機又有貨了,無耐我在找會員卡的時候,發現他又缺貨了。

接下來我突然想說會不會隔一陣子又有貨,於是我就在網路上亂逛,順便觀察這一台有貨和沒貨的狀態。大約觀察了2~3個小時,發現原來他的機制很有趣,原來他會大約一個小時有貨一次,然後隔了五分鐘左右,就會消失(來照成搶購的假象嗎?)。


後來因為沒有找到會員卡,跟信爺借了黃色鬼屋的帳號,訂了一台。
今天打電話來說已經送過來了,跟我說幫我送到5X+2號,我跟他說我家住在5X號,他說,對~地址是寫5X號,但是就在你家隔壁,問我方便去隔壁跟他拿一下嗎?我整個火了...如果送到 5X-2 就在我家對門,多少有點交情,現在送到5X+2,不是我們這棟的,怎麼可能會有交情,況且要我跟一個完全不認識的人拿東西,東西拿不到要怪誰?所以當下就被我拒絕...........

難道黃色鬼屋真的對員工很不好,所以員工故意把事情亂做讓鬼屋生意不好嗎?還是剛好這一個員工頭腦裏面裝了該裝在屁屁裡的東西呢?

p.s 下午黃色鬼屋又打來...
鬼:『Hugh,你家沒人在家,我們已經幫你跑了兩次了,但是都沒人在家』
H(OS):聽你再唬爛,最好是你有送過來,我有收到你的電話嗎?
H:可以請人來收,請你等一下送過去

掛電話後,我就打電話回家問,我媽在他打給我的前10分鐘就是一直在家的
我再打給他,跟他說有人在,請他馬上送,結果不到10分鐘就送到了

==========心得=========================================
黃色鬼屋假很明顯就是根本不想送到我家吧....
等等回去如看不滿意在來當奧客

繼續閱讀...

終於解決 ubuntu下 firefox 很慢的問題

話說 ubuntu 下的 firefox 也用了半年多了,最近開/關 firefox 時,等待的時間都非常的長,至少在半分鐘以上,甚至一關閉,firefox 無回應的對話匡就跳出來跟我 say hello,身為網路重度使用者,對於這種情況,實在是非常難忍受....


覺得不好用,就是要改進的時間了,所以今天早上花了一點時間找了一下,發現修改的方式大致有關閉ipv6,安裝dnsmasq以及壓縮 sqlite 資料庫等方式,前兩種要重新開機,懶得測試,所以先壓縮一下資料庫,沒想到效果超讚的,現在打開和關閉 firefox 都可以用飛快形容。

1. 首先要關閉 firefox
2. 然後開終端機,輸入

for f in ~/.mozilla/firefox/*/*.sqlite; do sqlite3 $f 'VACUUM;'; done

3. 等他跑完後,再打開 firefox,就會發現開啟的時候變得超快的.....讚




繼續閱讀...

我也有悠遊卡手機了.......

話說,某天在敗01上面看到有人把 iphone 改成悠遊卡手機,仔細研究了一下作法,其實不會很難,只是一直沒有時間自己動手做,最近抓了一些空檔,自己動手做了一下,還真的有給他真有趣勒。DSC02751

其實作法很簡單,需要一張已經用到幾乎沒錢的悠遊卡,一枚單程票,去光水,半張威X電信買的擋電池波貼紙,焊槍+銲錫。

1. 把單程票泡在去光水中,每格約10分鐘拿出來刷調外層的塑膠,然後再丟下去泡,如此直到單層票裡面的電路版被洗出來。然後輕輕的凹電路版,原本接在上面的晶片就會掉下來了。

2. 先用滾水泡悠遊卡,悠遊卡會變形,然後拿出來壓平&放涼,然後你就會發現悠遊卡的晶片那一塊特別的凹(線圈也會有一點凹進去的痕跡),然後拿焊槍去把悠遊卡晶片表層的塑膠燙掉,拿出晶片來。晶片是一個兩邊是導電片,中間是一塊黑色封裝的東西,拿的時後原本黏在上面的線可以拿掉,但是小心不要把導電片給弄壞了。

3. 注意觀察剛剛單層車票的電路版,線的兩頭最後都會接到某一個面上面去,只要把悠遊卡晶片兩邊銲到這兩條線的兩頭就OK了正負極應該沒差,因為兩頭是導通的,所以只要接上去,就不會有問題。

4. 拿威X電信買來的防電磁波貼布貼到手機殼後面去,如果不貼的話,我試過無論如何都沒有辦法感應,所以只好被搶150去買一張來用。

5. 完成圖就是如下圖,右邊就是貼起來的模樣,但因為做的中間都懶得拿相機,所以沒有中間的相片囉。

DSC02753

6. 最後要說的是,如果你想要網路上能夠查餘額,請還是愛用威X電信的產品,另外如果悠遊卡常需要去退款的話,建議不要這樣玩囉,這樣子搞是沒辦法退款的。


繼續閱讀...

  © Blogger template 'Minimalist G' by Ourblogtemplates.com 2008 Modified By Hugh

Back to TOP