首頁  >  文章  >  資料庫  >  MySQL 的 FIND_IN_SET 或等效函數可以使用索引嗎?

MySQL 的 FIND_IN_SET 或等效函數可以使用索引嗎?

Patricia Arquette
Patricia Arquette原創
2024-11-05 21:22:02136瀏覽

Can MySQL's FIND_IN_SET or an Equivalent Function Utilize Indices?

MySQL FIND_IN_SET 或等效的方法可以使用索引嗎?

查詢 SELECT * FROM Foo WHERE FIND_IN_SET(id, '2,3')不利用主鍵索引。將其 EXPLAIN 輸出與確實利用索引的 SELECT * FROM Foo WHERE id IN (2,3) 的輸出進行比較時,這一點很明顯。

目標: 建構一個具有以下行為的預存程序與第二個查詢一樣,在不事先了解包含 ID 的逗號分隔字串的情況下利用索引。

解決方案:

建立一個接受字串作為的準備好的語句參數:

CREATE PROCEDURE my_sp(@id_string NCHAR(1000))

然後可以使用逗號分隔的字元字串作為參數來執行準備好的語句:

EXEC my_sp '2,3'

此方法實現了以下所需條件:

  • type is range (not ALL)
  • key is not NULL

這些條件顯示索引正在被使用。

安全注意事項:

準備好的語句可以降低 SQL 注入攻擊的風險。然而,確保使用者提供的資料經過淨化以防止二級 SQL 注入攻擊仍然至關重要。

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn