2011-12-27 14 views
14

Tengo una consulta SQL que utiliza los valores de una matriz en su cláusula WHERE:¿Cuántos valores en una cláusula "in" son demasiados en una consulta SQL?

$ids = array 
     ( 
      [0] => 1 
      [1] => 2 
      [2] => 5 
     ) 

$ids = join(',',$ids); 
$sql = "SELECT * FROM cats WHERE id IN ($ids)"; 


Mi pregunta es cuántos ID son demasiados?
¿Afectará la velocidad?

Gracias todos

+0

Todo depende de la estructura de su tabla y de sus índices. Y, obviamente, como dijo Sergei, cuanto más lento. – Aknosis

+0

posible duplicado de [número de elementos de MySQL dentro de "en cláusula"] (http://stackoverflow.com/questions/1532366/mysql-number-of-items-within-in-clause) –

Respuesta

0

Los más valores que usted pone en IN, más lentamente se ejecutan, obviamente.

"cuántos son demasiados" es una función de muchos factores. Por ejemplo, el tamaño de su conjunto de datos. O cómo se ve el resto de tu consulta.

4

Cuantos más datos seleccione, más tiempo llevará, pero su principal preocupación no debería ser la cantidad de ID que SELECCIONE. En su lugar, debe asegurarse de que su identificación tenga un INDEX o que sea el PRIMARY KEY. Esto hará que las búsquedas sean rápidas sin importar cuántos identificadores estés capturando.

+1

Generalmente sí. Pero si combina 'IN' con' ORDER' y 'LIMIT', se producen problemas en grandes conjuntos de datos. –

0

pensar en ... si tiene que escribir 5 páginas o 10 lo que lleva más tiempo ... es normal si tiene una gran cantidad de identificadores para llevar la consulta más tiempo. Debe buscar y asegurarse de que sus datos no se repiten porque eso hará que la consulta tome más tiempo para datos innecesarios.

5

Oracle tiene un límite de 1000, que he golpeado antes. A MySQL no parece importarle Sin embargo, la mejor solución es no usar una cláusula IN para ese gran conjunto de datos. ¿De dónde vienen los identificadores? Si proviene de la misma base de datos, vea si puede usar una subconsulta que busque en función de un parámetro, p. ID de usuario para encontrar los identificadores vinculados. Esto será mucho más eficiente ya que MySQL puede unirse internamente usando índices.

Cuestiones relacionadas