我正在使用配置了sqlite数据库的Laravel 5.4。
我有一些表,包括一个“约会”表,该表具有约2000多个行。
每当我尝试加载该表时,都会出现一个Query Exception
:
SQLSTATE[HY000]: General error: 1 too many SQL variables
如何克服?
同一数据库内的其他表似乎没有问题。我用谷歌搜索发现(也许)与sqlite3支持的SQL变量的限制有关。任何想法?
更新:我已经删除了表内的整个记录,现在可以了!
最佳答案
在您的情况下,可以通过将2000多个值的列表插入表(临时表或永久表)中,然后通过where id in (select id from my_table)
或使用< cc>或inner join
。使用内部联接和永久表,您可以设置显式索引,这可能比依靠查询优化器优化exists()
或in()
更有用:
select customers.* from customers inner join my_table on customers.id = my_table.list_element_id
如果2000多个变量的列表每次都会更改,则可以在事务期间插入它们,然后再删除它们。您只需要确保将表值隔离到其他并发进程中即可(例如,表中有另一个键用于thread_id或调用事务唯一的类似标识符)。
关于sql - 如何扩展sqlite3支持的最大SQL变量数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47847984/