回答

收藏

MYSQL查询WHERE IN vs OR

技术问答 技术问答 194 人阅读 | 0 人回复 | 2023-09-14

我已经开发了使用OR查询的系统:
- c: ?) x; _! c0 h7 k. x1 fSELECT * FROM tableA
* I# k- _5 C1 H" H" ?0 R3 iJOIN tableB ON (idA = idB): X' c* w( g1 C6 ~+ p
WHERE idA = 1 OR
* H+ \6 y0 w& N' z) f1 [      idA = 2 OR , s4 M" L; |, m
      idA = 3 OR ' a" Z; u. Y7 T3 T0 d4 [$ I3 e; P
      idA = 4 OR 4 Z0 b4 M, {2 k$ G" R& `) _% t. U
      idA = 5 ...... OR 8 x# Z) _, k% A* Z6 g0 e
      idA=100
! h  t, A# M$ o7 w4 H' t与查询IN进行比较:
1 @" Z# ~9 f, `/ y( n# Y* g: K$ ^SELECT * ' ^  I6 S4 p& B( ?/ i; X7 i/ R
FROM tableA JOIN tableB ON (idA = idB)' B9 P4 k4 B, N* k3 m( s
WHERE idA IN (1,2,3,4,5,......,100)
- h4 x8 t# F  QMYSQL数据库中最好的查询是什么?- X# U4 i" S7 y1 V6 @. Y1 ?5 }( s. C8 }
               
9 v' t6 c  H& Q" x解决方案:
  @  N' V: Z; {8 H: Y               
! a9 z$ ^+ A7 v% e" A. o2 Q/ r3 I/ t1 D: O
  ]. k8 r6 V: i  J* u  |1 W; E- J& {
                用于。
& Y: q8 Z& z4 k' @6 O$ yIN将使用索引。9 z' p. l& B, x1 M; o7 R5 L$ h
否则(afaik)将不使用索引。+ }% I* h* r- _6 p8 w5 q! l
另外,这一点不容忽视,IN版本:* f* ~8 O8 D- C4 P# v8 X6 ]
使用更少的代码
, @$ o" O( t) \+ v3 O3 M更容易维护
; A' T* @5 Z: c0 q. d, ^' V9 R更容易理解* ~. {; y1 Y# g& V8 V
; G1 o3 M4 F, H6 i) ?
仅出于这些原因,我准备为获得代码质量而遭受一点性能损失,但实际上您也获得了性能。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则