Mysql in 排序問題

2021-07-02 13:29:04 字數 1121 閱讀 1384

select * from

table

where id in (3,6,9,1,2,5,8,7);

這樣的情況取出來後,其實,id還是按1,2,3,4,5,6,7,8,9,排序的,但如果我們真要按in裡面的順序排序怎麼辦?sql能不能完成?是否需要取回來後再foreach一下?

其實可以這樣

select * from

table

where id in (3,6,9,1,2,5,8,7) order

by field(id,3,6,9,1,2,5,8,7);

returns the index (position) of str in

the str1, str2, str3, … list. returns 0

if str is

not found.

排序過程:把選出的記錄的 id 在 field 列表中進行查詢,並返回位置,以位置作為排序依據。

這樣的用法,會導致 using filesort,是效率很低的排序方式。除非資料變化頻率很低,或者有長時間的快取,否則不建議用這樣的方式排序。

作者建議在程式**中自行排序。

但是也有人說這種排序不會出現什麼效能瓶頸

具體還是自己測試一下吧。

$result

=$model

->query("select "

.$field.

" from `mi_city` where id in ("

.$where.

") order by find_in_set('id','"

.$where.

"')");

$result

=$model

->query("select "

.$field.

" from `mi_city` where id in ("

.$where.

")order by find_in_set(id,'"

.$where.

"')");

注意上面的兩種sql格式!find_in_set中第乙個欄位不應該加引號!否則會無效!

MySql IN 和 OR 效率問題

假設檢索的列為n,in 的時間複雜度為 o logn 而 or 的時間複雜度為 o n 在資料量少於100條時的情況下差別不大 當要檢索的列為主鍵索引時,in 的執行速度和 or 差別不大 當要檢索的列為普通索引時,in 的執行速度和 or 差別不大 當要檢索的列沒有索引時,in的執行速度要遠大於 ...

mysql in子句 MySQL IN 子句

可以使用 in 子句代替許多 or 條件。要想理解 in 子句,還以表 employee tbl 為例,它的所有記錄如下所示 mysql select from employee tbl id name work date daily typing pages 1 john 2007 01 24 2...

mysql in 索引 失效 in 索引失效的問題

簡單的in查詢 索引失效 步驟1 檢查建立索引沒有 order status 欄位為普通索引的tinyint型別 2 檢查是否使用了使索引失效的語句 3 explain檢視執行計畫 而 in 1 時會走索引 5 檢視是否關閉的全域性的索引 comment顯示disabled則表示關閉了索引 show...