Ver Mensaje Individual
  #7 (permalink)  
Antiguo 13/08/2013, 09:26
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: mysql muy lento

Código MySQL:
Ver original
  1. mysql> EXPLAIN SELECT * FROM texto WHERE texto = 'hola' LIMIT 1;
  2. +----+-------------+-------+------+---------------+------+---------+------+---------+-------------+
  3. | id | select_type | table | type | possible_keys | key  | key_len | ref  | rows    | Extra       |
  4. +----+-------------+-------+------+---------------+------+---------+------+---------+-------------+
  5. |  1 | SIMPLE      | texto   | ALL  | NULL        | NULL | NULL    | NULL | 2300356 | USING WHERE |
  6. +----+-------------+-------+------+---------------+------+---------+------+---------+-------------+
  7. 1 row IN SET (0,00 sec)
Esto me dice dos cosas: Por un lado, que estás haciendo un FULL TABLE SCAN, lo que resulta espantoso. Eso ocurre porque no existen índices definidos sobre el campo, por lo que debe leer la tabla entera para luego aplicar el WHERE.
Eso resulta muy ineficiente.
Como ya te remarcaron, conviene que generes un INDEX sobre ese campo, pero siendo un TEXT eso puede tener algunas complicaciones, ya que si los textos son demasiado extensos, deberás segmentar la clave del índice creado.
Por otro lado, si las búsquedas son por proximidad, conviene hacerlo con indices FULLTEXT, que son mejores para eso, pero con el inconveniente que sólo se admiten en tablas de tipo MyISAM, y si estás usando InnoDB, no se podrá. Eso a menos que separes el campo en otra tabla, relacionándolo por medio de una FK programada (ya que las MyISAM no tienen FK).

En definitiva, se puede mejorar la performance, usando diversas aproximaciones al problema, más allá de convenir usar un hardware mejor. Pero no te podemos dar consejos avanzados sin conocer mejor el contexto de tu sistema, el tipo de consultas que usas, los datos y la estructura de la base.
Nos falta demasiada info para poder dar un buen diagnóstico.
Respecto a las consultas en si con servidores limitados, es bastante variable. Yo he hecho consultas eficientes con tablas de decenas de millones de registros y más de 1 Gb de peso, usando una notebook con 6 Gb de RAM y sin mayores retrasos. Y también he tenido problemas con consultas de apenas algunos cientos de miles de registros...
Muchas veces se resuelve con mejores consultas e índices. Pero necesitamos saber más para decirlo con certeza.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)