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'
此方法實現了以下所需條件:
這些條件顯示索引正在被使用。
安全注意事項:
準備好的語句可以降低 SQL 注入攻擊的風險。然而,確保使用者提供的資料經過淨化以防止二級 SQL 注入攻擊仍然至關重要。
以上是MySQL 的 FIND_IN_SET 或等效函數可以使用索引嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!