博主在開發中遇到這樣一個問題:
select * from `user` where id in(23,1,55,94)
當執行類似這樣一條sql 的時候,mysql都會事先將id排序再去查找:
說明:這個在高性能mysql里面有介紹,in查詢其實是一個掃表的過程,in查詢時,底層是先將in里面的id就從小到大排序優化,然后再執行in查詢的,所以
最好是手動將id從小到大排序后再執行in查詢,例如in (1,23,55,94),然后再按照你想要的順序排序就好了
但是業務要求查詢結果需要按照 in 里面id的順序(即23,1,55,23,94的順序 )返回,這時候該怎么做呢?
這條語句就可以搞定,是不是很方便 : select * from `user` where id in (23,1,55,94) order by field (id,23,1,55,94)
題外話:還有個不推薦的但可行方式,就是拿到id的數組后遍歷分開查庫,這樣肯定會影響不少性能。。。
