2012-07-29 12 views
5

Estoy construyendo una aplicación de Twitter que agarra un entero usuarios siguiente y recibe su identificación específica Ex: 1223455MySQL 1,000 's de o declaraciones (buena idea?)

también tengo una enorme base de datos completa de filas que contienen un ID específico Twitter ... Mira los ejemplos en filas ...

|1| 122345 | 
|2| 2232144 | 
|3| 99653222 | 
|4| 123232 | 
|5| 2321323 | 
|6| 3121322 | 

El problema es que todos sabemos que Twitter es todo acerca más y más seguidores (1000) de, y yo estaba Me pregunto si esta es una buena consulta de MySQL para ejecutar potencialmente hasta 20 veces en una ejecución de scripts ...

SELECT * FROM table WHERE twitterID='132323' OR twitterId='23123' OR twitterId='23123' OR twitterId='23123' OR twitterId='23123' OR twitterId='23123' OR twitterId='23123' OR twitterId='23123 

Y sigue y sigue y sigue y sigue ... Hay potencialmente podría haber más de 1.000 o declaraciones en una sola consulta (y una consulta similar como esto podría ser llamado 20 veces)

Esto no lo hace parece una muy buena práctica de programación, pero no he escuchado de otra manera ... ??

+0

¿Ha utilizado ** ** EN palabra clave? – hmmftg

+0

Veo que aceptó la respuesta con la lista "en". Esto es perfectamente razonable, pero debería considerar la versión que mantiene los identificadores en una tabla y usa una combinación (o en). En algún momento, puede encontrarse con problemas de compilación e incluso problemas de longitud de la consulta. –

Respuesta

4

Utilice el especificador in:

Select * from table where twitterid in (123,456,789,...) 
+0

Aunque esto sigue siendo una buena idea ... ¿Será increíblemente lento? –

+1

¿tiene un índice para ese campo _twitterID_? –

+0

Será más rápido que los ors. Solo otra sugerencia en la que puedo pensar es usar una vista si constantemente busca grupos de números. –

4

Ésta es una idea muy mala por cierto. MySQL no hace un buen trabajo con la optimización de las declaraciones OR.

Usted sería muy mejor usar una unión o algo así

WHERE twitterId IN (
     select * 
     from followers 
     where followee = whatever 
) 
0

Prueba esto:

SELECT * 
FROM table t1 
WHERE twitterID 
     IN (select twitterID 
      from twitterIDsTable t2 
      where t1.twitterID = t2.twitterID)--for performance 
Cuestiones relacionadas