2009-07-29 11 views
6

Por favor, dígame por la experiencia con el uso de la "cláusula IN" en una consulta MySQL se considera demasiado grande de una lista para pasar a ser considerado una buena práctica?¿Cuándo se considera demasiado para usar cadenas en una cláusula MySQL IN?

Escenario de ejemplo es que tengo una serie de números de identificación de usuario que extraeré de un caché, puede ir de cualquier número desde 1 hasta 5.000 números en esta lista y usaré una consulta de MySQL con esta lista como este ejemplo;

SELECT column FROM table 
WHERE userid 
IN (2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20) 

¿Me puede dar su opinión sobre este tema por favor?

+0

¿Qué está tratando de lograr? ¿Tal vez deberías usar join en lugar de consulta que has mostrado? – maciejkow

+1

Creo que esta es una buena pregunta sin tener en cuenta la consulta específica. Recomiendo @jasondavis para eliminar la consulta y mantener la pregunta de "¿cuándo hay demasiados elementos en la lista IN"? –

+0

@Rax Olgud He actualizado – JasonDavis

Respuesta

0

Mientras que su ID de usuario campo está indexado, suena como una buena opción.

De todos modos, la verdadera pregunta aquí sería comparar el rendimiento de IN con alguna otra alternativa. Si esa es la única manera de conseguir sus datos, no hay mucho que se pueda hacer al respecto

0

No recomendaría usar la cláusula in, la consulta ejecutará asignar más rápido si usó una unión en su lugar.

¿Cuál es la estructura de su tabla, supongo que tiene una tabla que almacena relaciones de amistad, no puede unirse a eso en su lugar?

SELECT * --you columns 
FROM FriendLinks fl 
Inner JOIN Users u on fl.friendid = u.id 
WHERE u.id = <your id> 

o algo por el estilo

+0

He estado experimentando con diferentes combinaciones y métodos para hacer esto durante más de un año, mis resultados si un usuario tiene menos de 1,000 amigos, la cláusula IN funciona más rápido y parece que funciona más rápido con un JOIN pero ahora mi sitio está empezando a usar cosas que ya tienen 2-3 uniones, así que no quería agregar el amigo unirse a ellos también. También otra razón es que pronto voy a guardar en caché la lista de amigos en Memcache o como una matriz en un caché de archivos, así que una vez que está en caché no puedo usar un join? – JasonDavis

2

Cabe señalar que algunas bases de datos tienen límites en el número de entradas en una cláusula IN - versiones de Oracle < = 10 están limitados a 1000 . No estoy seguro acerca de v11.

+0

Es bueno saberlo, si mysql tiene un límite – JasonDavis

Cuestiones relacionadas