本文**:
如果是在非常高的併發之下,還是建議用記憶體資料庫redis去實現計數的功能。如果不是那麼高的併發,用表實現就可以。
drop table access_counter;
create table access_counter(
cnt int unsigned not null
insert into access_counter values(0);
update access_counter set cnt=cnt+1;
select * from access_counter;
--上面的方法在高併發性上有問題,會產生大量的鎖
drop table access_counter;
create table access_counter(
solt int not null primary key,
cnt int not null
delimiter $
drop procedure if exists `proc1`$
create procedure `proc1`()
begin
declare i int;
set i=0;
while i<100 do
insert into access_counter values(i,0);
set i=i+1;
end while;
end$
delimiter ;
call proc1();
select * from access_counter;
--這樣就隨機選擇乙個solt進行更新
--rand()函式呼叫可以在0和1之間產生乙個隨機數
update access_counter set cnt=cnt+1 where solt=floor(rand()*100);
--如果每隔一天開始乙個新的計數器,那方法是:
drop table access_counter;
create table access_counter(
access_day date not null,
solt int not null,
cnt int not null,
primary key(access_day,solt)
--duplicate key update 跟oracle的merge into 類似
insert into access_counter(access_day,solt,cnt)
values(current_date,floor(rand()*100),1)
on duplicate key update cnt=cnt+1;
--如果不想有太多資料,那就每天刪一次
update access_counter as a inner join
(select access_day,sum(cnt) as cnt,min(solt) as msolt from access_counter
group by access_day) as b
using (access_day)
set a.cnt = if(a.`solt`= b.msolt,b.cnt,0),
a.solt = if(a.`solt`= b.msolt,0,a.`solt`);
delete from access_counter where solt<>0 and cnt=0;
mysql計數 mysql實現計數器
本文 如果是在非常高的併發之下,還是建議用記憶體資料庫redis去實現計數的功能。如果不是那麼高的併發,用表實現就可以。drop table access counter create table access counter cnt int unsigned not null insert int...
計數排序簡單實現
嘮叨完乙個 開始寫計數排序這個簡單的線性排序演算法。原理很簡單,繼續wiki 之 當輸入的元素是 n 個 0 到 k 之間的整數時,它的執行時間是 n k 計數排序不是比較排序,排序的速度快於任何比較排序演算法。由於用來計數的陣列c的長度取決於待排序陣列中資料的範圍 等於待排序陣列的最大值與最小值的...
計數排序 C 實現
一 演算法描述 插入排序 選擇排序 氣泡排序 歸併排序 堆排序以及快速排序都是比較排序演算法 各元素之間的次序依賴於他們之間的比較。在最壞情況下,任何比較排序演算法都需要做 nlgn 次比較。因此堆排序和歸併排序都是漸進最優的比較排序演算法。計數排序不是一種比較排序演算法,二是基於運算來確定元素的排...