mysql數字輔助表 MySQL中數字輔助表的建立

2021-10-20 23:14:10 字數 1398 閱讀 3960

數字輔助表是乙個只包含從1到n的n個整數的簡單表,n通常非常大;

如何建立這樣乙個輔助表:

(1)我們可以通過下面這個方式建立:

mysql> create table nums(

-> a int unsigned not null primary key

-> )engine=innodb;

query ok, 0 rows affected (0.13 sec)

create procedure pcreatenums(n int unsigned)

begin

declare s int unsigned default 1;

truncate table nums;

while s <= n do

begin

insert into nums select s;

set s = s+1;

end;

end while;

end;

測試一下,插入100000行的資料:

call pcreatenums(100000);

用時:[sql]call pcreatenums(100000);

受影響的行: 1

(2)我們還可以通過下面這個方式建立:

create procedure pcreatenums(n int unsigned)

begin

declare s int unsigned default 1;

truncate table nums;

insert into nums select s;

while s*2 <= n do

begin

insert into nums select a+s from nums;

set s = s*2;

end;

end while;

end;

測試一下,插入200000行的資料:

call pcreatenums(200000);

用時:mysql> call pcreatenums(200000);

query ok, 65536 rows affected (1.60 sec)

(3)第一種方式沒有任何的問題,除了效率,因為要插入100000行的資料,需要的時間相對較長;第二種方式是最先插入{1},然後是{2},{3,4},{5,6,7,8}……是按照2的指數次進行插入的,實際只執行了10多次插入操作;第二種方式的缺點是,數字輔助表是按照2的指數次進行插入的,因此上述實際的插入行數是131072,而不是200000行:

mysql> select count(1) from nums;

| count(1) |

| 131072 |

1 row in set (0.11 sec)

mysql 輔助表 MySQL 數字輔助表

數字輔助表是乙個包含從 1 到 n 的 n 個整數的簡單表,n 通常很大。因為數字輔助表是乙個非常強大的工具,可能經常需要在解決方案中用到它,所以建議建立乙個持久的數字輔助表,並根據需要填充一定資料量的值 mysql技術內幕 sql程式設計 建立數字輔助表 create table nums a i...

mysql 日期輔助表

1 建立乙個num表,用來儲存數字0 9create table num i int 2 在num表中生成0 9insert into num i values 0 1 2 3 4 5 6 7 8 9 3 生成乙個儲存日期的表,datalist是欄位名 create table ifnot exis...

數字輔助表

set nocount on if object id dbo.nums is not null drop table dbo.nums gocreate table dbo.nums n int not null primary key declare max as int,rc as int s...