【发布时间】:2019-03-18 23:43:18
【问题描述】:
出现以下错误
SQLSTATE[HY000]: 一般错误:1390 Prepared statement contains too many placeholder
我的查询变成了最近表格中的数据
SELECT
*
FROM
table
WHERE col1 = 'some-val'
AND col2 NOT IN ('va1', 'val2', 80k values... )
我使用的是 Laravel 5.6
$data_will_be_skipped = OtherModel::select('code')
->where('col1', 0)
->orWhere('col2', 1)
->groupBy('col3')
->pluck('col3')->toArray();
$data_will_be_skipped 现在大约是 80k 个数组
Model::where('col1', 'some-val')->whereNotIn('col2', $data_will_be_skipped)->get();
【问题讨论】:
-
您从哪里获得
not in数组的值?如果它们仅来自数据库中的某些表。考虑使用连接而不是not in。无论是否使用 laravel,not in本身都有数据包大小限制 -
从索引的角度来看,您当前的方法也效率不高
-
是的,数据库中的其他表正在获取未包含的值。
-
请更新您的问题以添加有关您从哪些表中获取它们的更多详细信息。两张表有什么关系?从另一个表中获取这些值背后的逻辑是什么?