如何讓MySQL的FIND_IN_SET函數使用索引?

DDD
發布: 2024-11-07 16:50:03
原創
1029 人瀏覽過

How Can I Make MySQL's FIND_IN_SET Function Utilize Indices?

MySQL FIND_IN_SET 可以使用索引嗎?

MySQL 的 FIND_IN_SET 函數因不使用索引而臭名昭著,導致查詢效率低下。但是,在處理逗號分隔清單時,還有其他方法可以實現所需的索引行為。

範圍方法

所提供的答案中描述的技術建議使用帶有參數的準備好的語句接受逗號分隔列表形式的字串。透過在預備語句中使用具有非 NULL 鍵的範圍類型,可以確保在執行 IN 子句時使用索引。

例如,以下查詢使用索引執行範圍搜尋'id' 欄位:

explain 
select * from ratings where id in (2331425, 430364, 4557546, 2696638, 4510549, ...)
登入後複製

注意事項和注意事項

雖然這種方法可以實現高效率的索引查詢,但考慮以下預防措施至關重要:

  • SQL 注入攻擊: 在預存程序中使用使用者提供的資料可以為SQL 注入攻擊開闢路徑。適當的清理對於防止惡意程式碼執行至關重要。
  • 表掃描:如果用於範圍搜尋的列未建立索引或具有非空值,則可能會導致可怕的表掃描,這對於大型資料集來說效率非常低。

以上是如何讓MySQL的FIND_IN_SET函數使用索引?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板