前陣子找工作的空檔一時興起就寫了個威力彩的出號程式,和一般的亂數出號來說,我多加了一些統計分析的方式,再去計算出最有中獎相的幾組號碼出來做為參考。
前兩天突然想要擴大比對的範圍,如果全部的組合都拿來比對會如何?所以產生了一個全部組合的需求出來,於是用了PHP很簡單的寫了個威力彩的全部組合程式,非常暴力的用了七層For迴圈來產生號碼。
然後又想說得把這些數據放到DB去,所以就寫了語法要把資料插入MySQL中,結果第一次跑下來,一個小時跑了400多萬筆,全部2200多萬筆跑完估計要五六個小時,於是我就中止了程式,然後上網找資料,後來把Table的index和PK先拿掉,自動增號也取消改成直接寫入序號的方式,最大的改善是在迴圈中把原本一筆一個insert的語法改成先組合先好幾個Values的語法後再insert,這下時間縮到51分鐘左右,有進步,但因為在找資料的過程中有看到一些討論,所以我就想再精進一下。
於是我發現我原本直接在迴圈中做insert並不聰明,因為迴圈會逐層少1來跑,造成每次insert語法後面的values個數都不同,我試著把inser搬到不同層的迴圈去執行,用意是讓inser 一次的values數目可以多一些,但樣做沒有解決根本的問題,所以最多只能縮到22分鐘而已。