2012年12月1日 星期六

我發現了 MySql 的超級大 BUG

我用 MySql 6


有一個 Table 有將近三千萬筆 ,格式是 MYISAM ,檔案 Size 為 4.1GB , 23 個欄位


我在程式中下了一個 SQL Command


select * from T1 where F1='xx' and F5='xx' and F6='xx' and F7='xx' order by F6 desc


結果給我跑了四萬多筆,我想說怎麼可能這麼多,應該頂多幾十筆而已


然後我拿到 SQL 編輯器去跑 ,還是跑四萬多筆


真是見鬼了....而且還跑出 where 條件以外的資料....當場三字經就出來了


然後我把  desc 拿掉在跑一次....@@


居然就正常了...只出了 21 筆.....那剛剛是怎樣


又把 desc 加回去 ....又是四萬多筆....機車咧....


我一定搞清楚這是為什麼,我用過n種資料庫,還沒碰過這種事


我先把 * 改成我要用的三個欄位....


select F5,F6,F8 from T1 where F1='xx' and F5='xx' and F6='xx' and F7='xx' order by F6 desc


在跑一次還是四萬多筆


那我就在 desc 後面加上剩下的欄位


select F5,F6,F8 from T1 where F1='xx' and F5='xx' and F6='xx' and F7='xx' order by F6 desc,F5,F8


在跑一次就正常了....@@,只出21筆


所以這就是說如果排序用到 desc 的話,就一定要把其他的欄位也抓來排序,缺一不可


在此提醒大家....^^


沒有留言:

張貼留言

Windows 10 閒置一段時間會被登出

在 Windows 7 以前,只要更改螢幕保護設定就可以了 現在 Windows 10 多了一個設定 設定 / 帳戶 / 登入選項 把他改成"永不"....就不會在閒置之後被要求登入了 真搞不懂,為什麼要多此一舉,害我一直被登出,找半天找不到原因 後來在網路上...