MySQL 數字輔助表

神諭丶發表於2014-08-10
首先建立數字輔助表


  1. create table nums(
  2. a int unsigned primary key);



建立儲存過程,將數字插入nums中



  1. create procedure pCreateNums (cnt int unsigned)
  2. begin
  3.     declare a int unsigned default 1;
  4.     truncate table nums;
  5.     while a<=cnt do
  6.         begin
  7.             insert into nums select a;
  8.             set a=a+1;
  9.         end;
  10.     end while;
  11. end;


然後插入50,000個數字


  1. call pCreateNums (50000);



但是此儲存過程效率太慢,主要開銷在於insert語句被執行了50,000次


最佳化方法:


  1. create procedure pFastCreateNums (cnt int unsigned)
  2. begin
  3.     declare s int unsigned default 1;
  4.     truncate table nums;
  5.     insert into nums select s;
  6.     while s*2<=cnt do
  7.         begin
  8.             insert into nums select a+s from nums;
  9.             set s=s*2;
  10.         end;
  11.     end while;
  12. end;


若執行

  1. call pFastCreateNums (50000);


最終插入的數值雖並非50,000個(大於50,000),但極大減少了insert次數,這將大大提升效率。
使用的時候,可以透過where來限制。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29773961/viewspace-1248559/,如需轉載,請註明出處,否則將追究法律責任。

相關文章