接前文:
http://blog.itpub.net/29254281/viewspace-2120294/
前文中,Order by rand()在數(shù)據(jù)量大的時(shí)候,會(huì)有一些性能問(wèn)題.
-
set autocommit=false;
-
set @roomid:=-1;
-
select
-
min(roomid) into @roomid
-
from
-
room_info
-
where
-
roomid >
-
(
-
select
-
floor(max(roomid) * rand() + 1)
-
from
-
room_info
-
)
-
and state = 1;
-
-
update room_info
-
set
-
state = 2
-
where
-
roomid =@roomid
-
and state = 1;
-
-
select @roomid;
-
-
commit;
優(yōu)化的方式就是從最大的ID,隨機(jī)選取一個(gè)值。
這樣避免了排序.
但是應(yīng)用程序還是需要判斷,Update的影響行數(shù)是否為0.如果為0,則需要再次調(diào)用.
大招版本:
-
set autocommit=false;
-
set @roomid:=-1;
-
select max(roomid) into @roomid from room_info;
-
set @roomid:=floor(rand()*@roomid+1);
-
update room_info
-
set
-
state = 2
-
where
-
roomid =
-
coalesce
-
(
-
(select roomid from (select min(roomid) roomid from room_info where state=1 and roomid > @roomid) a),
-
(select roomid from (select max(roomid) roomid from room_info where state=1 and roomid < @roomid) b)
-
)
-
and state = 1 and @roomid:=roomid;
-
-
select @roomid;
-
-
commit;
標(biāo)題名稱:MySQL隨機(jī)選取資源--優(yōu)化
當(dāng)前地址:http://jinyejixie.com/article10/ggicgo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、手機(jī)網(wǎng)站建設(shè)、外貿(mào)建站、網(wǎng)站維護(hù)、定制開(kāi)發(fā)、企業(yè)建站
廣告
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源:
創(chuàng)新互聯(lián)