數字輔助表是乙個只包含從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...