select actor_id,@curr_cnt:=cnt as cnt , @rank:=IF(@prev_cnt!=@curr_cnt,@rank+1,@rank) as rank, @prev_cnt:=@curr_cnt as dummy from( select actor_id,count(*) as cnt from film_actor group by actor_id ORDER BY cnt desc ) as der, (select @curr_cnt:=0,@prev_cnt:=0,@rank:=0 ) as t -- 實際上相當於賦值操作 -- 排名,考慮並列情況 SELECT @rownum:=@rownum+1 AS rownum,IF(@total = cnt ,@rank ,@rank :=@rownum) AS rank , @total := cnt as total1, der.* FROM ( select actor_id,count(*) as cnt from film_actor group by actor_id ORDER BY cnt desc ) as der, ( SELECT @rank := 0 ,@rownum := 0 ,@total := NULL ) as t
-- c100w 目標表 c10w 源表 對應關系 c10w.id=c100w.id update c100w,c10w set c100w.grender=c10w.grender where c10w.id=c100w.id -- 10w 2.083s
常見性能優化場景:
1、多表連接查詢很慢,而且不論結果多少,查詢耗時差不多。可能原因缺少索引導致全表掃碼 ,考慮索引優化
查詢缺少索引時,減少表連接看耗時是否減少,再排查連接表是否有索引。
