2010-01-08 17 views
14

Estoy trabajando en un sitio web que utiliza esencialmente una base de datos con una tabla de organizaciones, una fila para cada organización. Cada organización puede tener un número ilimitado de palabras clave adjuntas. Las palabras clave se representan en una tabla separada de las organizaciones donde cada fila es simplemente la clave principal, la palabra clave y la clave principal de la organización a la que está asociada. Finalmente, esta tabla podría tener muchos miles de entradas. ¿Esto hará que extraer registros de esta tabla, así como enumerar palabras clave únicas en la tabla, consuma demasiado tiempo?¿Cuántas filas de MySQL son demasiadas?

+0

Tengo que sacar una lista de palabras clave únicas, que se genera desde SELECCIONAR ÚNICA las palabras clave reales. ¿Es mejor hacer una tabla separada con las palabras clave únicas? De lo contrario, generará la lista a partir de las entradas de texto en lugar de la clave principal u otro índice entero. –

Respuesta

13

Tras un par de cientos de miles de filas está perfectamente bien, siempre y cuando:

  • que están indexadas adecuadamente
  • y sus consultas se hacen correctamente (es decir, utilizando los índices adecuados, por ejemplo)

Estoy trabajando en una aplicación que está haciendo muchas consultas en varias tablas con un par de cientos de miles de registros en cada una, con cláusulas joins y no "simple", y esa aplicación es w RABAJAR bien - bien, ya que hemos optimizado las consultas y los índices ^^


Un par de millones de filas, en esas condiciones, está bien también, yo diría que - depende de qué tipo de consultas (y cuántos de ellos) que va a hacer ^^


En todos los casos, sólo hay una manera de saber con seguridad:

  • usted tiene que saber qué tipo de consultas se le estar haciendo,
  • También debe tener un conjunto de datos grande para probar,
  • Y debe hacer una evaluación comparativa: inicie las consultas en su conjunto de datos, muchas veces, con concurrencia, como en "condiciones reales", y ayudará responder a las preguntas "¿manejará la carga? ¿Tengo que optimizar? cuáles son los cuellos de botella "
+23

Mantengo una base de datos de informes de 90GB (para los registros del servidor web) que tiene varias tablas con cientos de millones de filas, la más grande es 318m. Puedo obtener resultados de una consulta de selección estándar con una combinación aquí y allá (con carga moderada) en 10 - 50 ms. – Seth

+2

@Seth 6 años después, ¿sigue estando entre 10 y 50 ms o mucho menos ahora con hardware más nuevo? –

+2

Sospecho que las características de rendimiento están influenciadas en gran medida por el disco giratorio. Los hilanderos modernos son incrementalmente mejores que hace 6 años, pero no una gran cantidad. Si estuviera en una SSD, apostaría a que sería un orden de magnitud más rápido. (Esa base de datos desapareció hace algunos años, por lo que no puedo probarla de verdad). – Seth

1

Muchos miles de entradas no son muchas en absoluto. Asegúrese de indexar las palabras clave si necesita recuperar las específicas.

0

Si tiene que pedir los límites, lo está haciendo mal. Aunque estás describiendo una relación de Muchos a Muchos, lo cual está perfectamente bien.

Simplemente mantenga los índices actualizados y no debería ser un problema. Tengo una tabla en mi base de datos actual que tiene 94k filas, y es bastante rápida.

Algunas recomendaciones para hacerlo más rápido, si sabe cuánto tiempo puede ser la palabra clave, y no es demasiado grande, considere usar CHAR en lugar de VARCHAR, usará más espacio, pero una fila de bytes completamente establecida es órdenes de magnitud más rápido que uno que no lo es. Al ejecutar consultas, obtenga solo lo que necesita, es decir, las cláusulas limit/top y where, y no use '*' en el selector a menos que realmente necesite todas las filas.

+0

¿Por qué es incorrecto pedir los límites? – readikus

0

como ya se ha dicho antes de MySQL no debe ser el problema? - oí de tablas con millones de filas que causan ningún problema .. Pero tenga en cuenta que los bucles php alrededor peticiones MySQL puede ser complicado, ralentiza las cosas e incluso termina su secuencia de comandos con un error de "tiempo de espera"!

Cuestiones relacionadas