A quick fix for Laravel’s slow whereIn
Laravel 使用ORM時,時常用到whereIn的function,近期在使用上資料量太龐大造成whereIn進去的array數量很大,直接沒有顯示資料出來。後來查了資料發現是Eloquent 會使用PDO::prepare()
,在他這邊,db(mySQL, mariaDB)有一個
in_predicate_conversion_threshold
專門優化IN()子句的變量命名。默認情況下,該值為1000
,這意味著查詢將轉換為暗示子查詢的優化版本。因此,在 IN 子句中綁定超過 999 個項目會導致錯誤,數據庫將返回 0 個結果而不會出錯。
解決方式
使用whereIntegerInRaw確保array直都是整數。
Entity::whereIntegerInRaw('id', $array)->get();
No Comment!
Join Us Discuss