gpt4 book ai didi

在 postgresql 中使用 IN 子句的性能

转载 作者:行者123 更新时间:2023-11-29 11:34:44 26 4
gpt4 key购买 nike

如果您的查询中有这样的内容,性能方面是什么:

    ... AND x.somfield IN (
33620,262,394,450,673,674,675,2331,2370,2903,4191,4687,5153,6776,6898,6899,7127,7217,7225,
7227,7757,8830,8889,8999,9036,9284,9381,9382,9411,9412,9423,10088,10089,10304,10333,10515,
10527,10596,10651,11442,12636,12976,13275,14261,14262,14382,14389,14567,14568,15792,16557,
17043,17459,17675,17699,17700,17712,18240,18370,18591,18980,19023,19024,19025,19026,19211,
19272,20276,20426,20471,20494,20833,21126,21315,21990,22168,22284,22349,22563,22796,23739,
24006,24321,24642,24827,24867,25049,25248,25249,25276,25572,25665,26000,26046,26646,26647,
26656,27343,27406,27753,28560,28850,29796,29817,30026,30090,31020,31505,32188,32347,32629
,32924,32931,33062,33254,33600,33601,33602,33603,33604,33605,33606,33607,33608,34010,34472,
35800,35977,36179,37342,37439,37459,38425,39592,39661,39926,40376,40561,41226,41279,41568,
42272,42481,43483,43867,44958,45295,45408,46022,46258) AND ...

我应该避免这种情况还是它足够快?

谢谢

最佳答案

您当然想检查执行计划。根据数据,它可能会或可能不会“好”。

如果表足够大,PG 可能会将其转换为“数组包含”操作并决定不对其使用索引。这可能会导致序列扫描(如果您在此表上没有其他 WHERE 条件)。

在某些情况下,OR 优于 IN,因为它作为两个索引扫描执行并合并。不过,在您的情况下可能不起作用,因为您那里有很多值(value)。同样,取决于数据。

除非你的表很小,否则在这种情况下你通常需要依赖其他容易索引的条件,例如日期、状态、“类型”等。那么这个 IN 只是一个“对有限数据重新检查”过滤器。

关于在 postgresql 中使用 IN 子句的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3212802/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com