elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


  Mostrar Mensajes
Páginas: 1 ... 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 [68] 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 ... 96
671  Programación / Bases de Datos / Re: como reemplazo un registro en una db? en: 25 Noviembre 2009, 00:43 am
Aunque no he visto dicho script php, espero que no sea muy cruel o danino, el usuario que inicio el post quiere algo automatico para buscar un mismo registro repetido en una, dos, tres o mas tablas en todos sus campos.... eso hasta lo que se de la forma tan automatica como el lo quiere no es posible. Los scripts pueden ayudar (sabiendo lo que se hace) igual como un procedimiento almacenado (sabiendo tambien lo que se hace) o opcionalmente puede hacerlo en una consulta SQL como le mostre, decision personal de el cual le quede mejor.

Citar
si modificas un valor importante, podrías dañar la caché, luego de eso tendrías que reconstruirla.

Este punto no me aclaro, si hablamos de MySQL (que no sabemos bajo que motor de DB el chico esta trabajando) pero si hicieramos referencia a MySQL, y si el realmente tiene activa la cache del motor se reseteara siempre que haga un insert, update o delete.... por ende estara constantemente defragmentando la cache y eso causa sobrecarga de I/O en disco, la cache es buena tenerla activa si hacemos referencia a una datawarehouse o similar, de lo contrario para un hosting lo mejor es desabilitarla o en su lugar usar una herramienta de terceros como memcache como API en php o funciones memcached dentro de MySQL como una funcion UDF entre varios servidores para compartir la carga (funcionamiento similar a MySQL cluster). Pero eso ya es otro tema independiente al peticionado por el...
672  Programación / Bases de Datos / Re: Se puede hacer esto? en: 24 Noviembre 2009, 19:22 pm
De nada encanto  :D   :D

Si tienes alguna duda mas cuando organizes tus ideas de las tablas, no dudes en preguntar nuevamente  ;)
673  Programación / Bases de Datos / Re: como reemplazo un registro en una db? en: 24 Noviembre 2009, 03:28 am
vaya...

El problemita aca entonces Cergath es que para buscar en una tabla cualquier registro, siempre debes anteponer un predicado especificando el campo donde haras esa busquedad. Por ejemplo, no es posible hacer una consulta de este estilo en el SQL general:

Código
  1.    SELECT * FROM TABLE WHERE * = VALOR  

En respuesta a tu pregunta, quieres buscar un valor en toda una tabla? tendras que asignar dicho valor a buscar a cada uno de los campos de la tabla o tablas en la cual estas realizando la busquedad.

Mas o menos asi:

Código
  1. mysql> SELECT * FROM Respuesta WHERE id_usuario = 22 AND id_res = 22;
  2.  

Para que busque campo por campo donde exista ese valor, por ejemplo:

Código
  1.  
  2. mysql> SELECT * FROM Respuesta;
  3. +------------+--------+--------------------------------------+
  4. | id_usuario | id_res | respuesta                            |
  5. +------------+--------+--------------------------------------+
  6. |         22 |      1 | Es blanco por su iluminacion interna |
  7. |         22 |      1 | Entonces porque cambia a amarillo    |
  8. |         22 |      1 | por efecto de alejacion              |
  9. |          2 |      2 | por la gravedad                      |
  10. |          2 |      2 | Por la densidad                      |
  11. |          3 |      2 | bla bla                              |
  12. |          3 |      2 | bla bla                              |
  13. |          3 |      2 | bla bla                              |
  14. |          3 |      2 | bla bla                              |
  15. +------------+--------+--------------------------------------+
  16. 9 ROWS IN SET (0.00 sec)
  17.  
  18. mysql> SELECT * FROM Respuesta WHERE id_usuario = 3 AND id_res = 2 HAVING(id_usuario) > 2;
  19. +------------+--------+-----------+
  20. | id_usuario | id_res | respuesta |
  21. +------------+--------+-----------+
  22. |          3 |      2 | bla bla   |
  23. |          3 |      2 | bla bla   |
  24. |          3 |      2 | bla bla   |
  25. |          3 |      2 | bla bla   |
  26. +------------+--------+-----------+
  27. 4 ROWS IN SET (0.00 sec)
  28.  
  29.  

Ahora suponiendo que el valor 2 se repite en otra tabla ademas de la ante expuesta, serian 1 join de 2 tablas, donde id_usuario se repitiese mas de 2 veces.

Código
  1.  
  2. mysql> SELECT * FROM Libro;
  3. +----------+--------------------+---------------------------------+
  4. | id_libro | titulo             | pregunta                        |
  5. +----------+--------------------+---------------------------------+
  6. |        1 | Como es el Sol?    | Quisiera saber porque es blanco |
  7. |        2 | Como es la lluvia? | Porque es transparente          |
  8. |        3 | Juego Favorito     | Cual me recomiendan             |
  9. +----------+--------------------+---------------------------------+
  10. 3 ROWS IN SET (0.00 sec)
  11.  
  12. mysql> SELECT * FROM Respuesta INNER JOIN Libro WHERE id_usuario = 3 AND id_res = 2 AND id_libro = id_res HAVING(id_usuario) > 2;
  13. +------------+--------+-----------+----------+--------------------+------------------------+
  14. | id_usuario | id_res | respuesta | id_libro | titulo             | pregunta               |
  15. +------------+--------+-----------+----------+--------------------+------------------------+
  16. |          3 |      2 | bla bla   |        2 | Como es la lluvia? | Porque es transparente |
  17. |          3 |      2 | bla bla   |        2 | Como es la lluvia? | Porque es transparente |
  18. |          3 |      2 | bla bla   |        2 | Como es la lluvia? | Porque es transparente |
  19. |          3 |      2 | bla bla   |        2 | Como es la lluvia? | Porque es transparente |
  20. +------------+--------+-----------+----------+--------------------+------------------------+
  21. 4 ROWS IN SET (0.00 sec)
  22.  
  23.  

En caso de que quieras actualizar el valor '2' de las 2 tablas expuestas anteriormente (Libro y Respuestas) Mas o menos se haria asi:

Código
  1. mysql> UPDATE Respuesta, Libro SET Respuesta.id_res = 60, Libro.id_libro = 60 WHERE Respuesta.id_usuario > 2 AND Respuesta.id_res = 2;
  2.  
  3. mysql> SELECT * FROM Respuesta;
  4. +------------+--------+--------------------------------------+
  5. | id_usuario | id_res | respuesta                            |
  6. +------------+--------+--------------------------------------+
  7. |         22 |      1 | Es blanco por su iluminacion interna |
  8. |         22 |      1 | Entonces porque cambia a amarillo    |
  9. |         22 |      1 | por efecto de alejacion              |
  10. |          2 |      2 | por la gravedad                      |
  11. |          2 |      2 | Por la densidad                      |
  12. |         55 |     60 | bla bla                              |
  13. |         55 |     60 | bla bla                              |
  14. |         55 |     60 | bla bla                              |
  15. |         55 |     60 | bla bla                              |
  16. +------------+--------+--------------------------------------+
  17. 9 ROWS IN SET (0.00 sec)
  18.  
  19. mysql> SELECT * FROM Libro;
  20. +----------+--------------------+---------------------------------+
  21. | id_libro | titulo             | pregunta                        |
  22. +----------+--------------------+---------------------------------+
  23. |       60 | Como es el Sol?    | Quisiera saber porque es blanco |
  24. |        2 | Como es la lluvia? | Porque es transparente          |
  25. |        3 | Juego Favorito     | Cual me recomiendan             |
  26. +----------+--------------------+---------------------------------+
  27. 3 ROWS IN SET (0.00 sec)
  28.  
  29.  

Resultara un poco incomodo, pero no hay una llave magica que busque 1 valor especifico en todos los campos de una o mas tablas a la vez (Al menos yo particularmente no conozco la manera si otr@ la conoce bienvenida sea) Puedes en su lugar idear algo ya sea a traves de lenguaje de programacion en un bucle ir comparando el dato buscado con todos los campos de una tabla o algo asi, o hacer una consulta SQL un poco larga pero que te permita buscar un dato en todos los campos de una o mas tablas.
674  Programación / Bases de Datos / Re: como reemplazo un registro en una db? en: 24 Noviembre 2009, 02:00 am
Es el unico registro que se miles de veces en ese mismo campo? o hay mas que se repiten en ese mismo campo????

Si es 1 registro que se repite miles de veces en ese mismo campo, algo como esto podria servirte:

Código
  1.  
  2. mysql> SELECT * FROM Respuesta;
  3. +------------+--------+--------------------------------------+
  4. | id_usuario | id_res | respuesta                            |
  5. +------------+--------+--------------------------------------+
  6. |          1 |      1 | Es blanco por su iluminacion interna |
  7. |          1 |      1 | Entonces porque cambia a amarillo    |
  8. |          1 |      1 | por efecto de alejacion              |
  9. |          2 |      2 | por la gravedad                      |
  10. |          2 |      2 | Por la densidad                      |
  11. +------------+--------+--------------------------------------+
  12. 5 ROWS IN SET (0.00 sec)  
  13.  
  14. mysql> UPDATE Respuesta SET id_usuario = 22 WHERE id_usuario < 2;
  15. Query OK, 3 ROWS affected (0.00 sec)
  16. ROWS matched: 3  Changed: 3  Warnings: 0
  17.  
  18. mysql> SELECT * FROM Respuesta;
  19. +------------+--------+--------------------------------------+
  20. | id_usuario | id_res | respuesta                            |
  21. +------------+--------+--------------------------------------+
  22. |         22 |      1 | Es blanco por su iluminacion interna |
  23. |         22 |      1 | Entonces porque cambia a amarillo    |
  24. |         22 |      1 | por efecto de alejacion              |
  25. |          2 |      2 | por la gravedad                      |
  26. |          2 |      2 | Por la densidad                      |
  27. +------------+--------+--------------------------------------+
  28. 5 ROWS IN SET (0.00 sec)
  29.  
  30.  

Resumido : UPDATE TABLA SET CAMPO = VALOR WHERE CAMPO < 2;

Asi todos los registros de ese campo que se repitan mas de 2 veces hacia adelante seran todos sustituidos por el valor nuevo que le asignes.
675  Programación / Bases de Datos / Re: Se puede hacer esto? en: 24 Noviembre 2009, 01:20 am
Hola.

A todo esto no te hemos colocado un simple ejemplo que te podria servir de guia en todo lo que hemos expuesto. Lo siguiente es sencillo, pero podria servirte como una guia basica de por donde empezar para completar tus ideas. Supongo que tu peticion es que X usuario genere una pregunta donde solo el Administrador y el usuario que genero la pregunta puedan responder a la dichosa pregunta del libro de visitas.

Supondre que estas trabajando bajo una base de datos MySQL. Y utilizare el modelado antiguo expuesto por CarlosNuel (Es que me encantan  ;D)

Tengo de ejemplo estas 3 tablas:

Código
  1.  
  2. mysql> SHOW TABLES;
  3. +--------------------+
  4. | Tables_in_primaria |
  5. +--------------------+
  6. | Libro              |
  7. | Respuesta          |
  8. | Usuarios           |
  9. +--------------------+
  10. 3 ROWS IN SET (0.00 sec)
  11.  
  12.  

La tabla Usuarios validara que usuario genero que pregunta y en base a ello le permitira responder en su propia pregunta o no... (dicha validacion ya te tocara hacerle dentro del codigo PHP)

Los campos de cada una son:

Código
  1.  
  2. mysql> EXPLAIN Libro;
  3. +----------+------------+------+-----+---------+----------------+
  4. | FIELD    | TYPE       | NULL | KEY | DEFAULT | Extra          |
  5. +----------+------------+------+-----+---------+----------------+
  6. | id_libro | tinyint(4) | NO   | PRI | NULL    | AUTO_INCREMENT |
  7. | titulo   | CHAR(20)   | YES  |     | NULL    |                |
  8. | pregunta | CHAR(40)   | YES  |     | NULL    |                |
  9. +----------+------------+------+-----+---------+----------------+
  10. 3 ROWS IN SET (0.00 sec)
  11.  
  12. mysql> EXPLAIN Respuesta;
  13. +------------+------------+------+-----+---------+-------+
  14. | FIELD      | TYPE       | NULL | KEY | DEFAULT | Extra |
  15. +------------+------------+------+-----+---------+-------+
  16. | id_usuario | tinyint(4) | YES  | MUL | NULL    |       |
  17. | id_res     | tinyint(4) | YES  |     | NULL    |       |
  18. | respuesta  | CHAR(100)  | YES  |     | NULL    |       |
  19. +------------+------------+------+-----+---------+-------+
  20. 3 ROWS IN SET (0.00 sec)
  21.  
  22. mysql> EXPLAIN Usuarios;
  23. +------------+-------------+------+-----+---------+----------------+
  24. | FIELD      | TYPE        | NULL | KEY | DEFAULT | Extra          |
  25. +------------+-------------+------+-----+---------+----------------+
  26. | id_usuario | tinyint(4)  | NO   | PRI | NULL    | AUTO_INCREMENT |
  27. | usuario    | CHAR(10)    | YES  |     | NULL    |                |
  28. | contrasena | VARCHAR(50) | YES  |     | NULL    |                |
  29. +------------+-------------+------+-----+---------+----------------+
  30. 3 ROWS IN SET (0.00 sec)
  31.  
  32.  

PD: Lo anterior son tablas creadas como ejemplo, recuerda no crear campos que accepten valores nulos para no desviarte de la normalizacion  ;)

Ahora suponte que la tabla Usuarios tiene ya 3 usuarios con contrasena registrados.

Código
  1.  
  2. mysql> SELECT * FROM Usuarios;
  3. +------------+---------+----------------------------------+
  4. | id_usuario | usuario | contrasena                       |
  5. +------------+---------+----------------------------------+
  6. |          1 | coco    | 202cb962ac59075b964b07152d234b70 |
  7. |          2 | maria   | 202cb962ac59075b964b07152d234b70 |
  8. |          3 | pedro   | 202cb962ac59075b964b07152d234b70 |
  9. +------------+---------+----------------------------------+
  10. 3 ROWS IN SET (0.00 sec)
  11.  
  12.  

Las contrasenas estan encriptadas en md5 por eso se ven de esa manera.

Ahora imagina que los 3 usuarios existentes ya realizaron 1 pregunta en el libro de visitas.

Código
  1.  
  2. mysql> SELECT * FROM Libro;
  3. +----------+--------------------+---------------------------------+
  4. | id_libro | titulo             | pregunta                        |
  5. +----------+--------------------+---------------------------------+
  6. |        1 | Como es el Sol?    | Quisiera saber porque es blanco |
  7. |        2 | Como es la lluvia? | Porque es transparente          |
  8. |        3 | Juego Favorito     | Cual me recomiendan             |
  9. +----------+--------------------+---------------------------------+
  10. 3 ROWS IN SET (0.00 sec)
  11.  
  12.  

PD: En el caso anterior al campo id_libro ser una clave primaria dicho usuario solo podra tener capacidad de generar 1 sola pregunta ninguna mas eternamente. Ya que el campo id_libro tiene el mismo valor que id_usuario de Usuarios, pero aunque reconozco esta limitacion esto solo es un ejemplo de guia y en la tabla siguiente te podria dar una idea mas clara de como trabajar con doble indices (un primario y secundario) para que dicho usuario pueda regresar a generar un tema nuevo  ;)

Ahora se insertan varios datos segun la pregunta solicitada.

Código
  1. mysql> INSERT INTO Respuesta VALUES((SELECT id_usuario FROM Usuarios WHERE usuario = 'coco'), (SELECT id_usuario FROM Usuarios WHERE usuario = 'coco'), 'Es blanco por su iluminacion interna');                                                                                                  
  2. Query OK, 1 ROW affected (0.00 sec)                                                                                                              
  3.  
  4. mysql> INSERT INTO Respuesta VALUES((SELECT id_usuario FROM Usuarios WHERE usuario = 'coco'), (SELECT id_usuario FROM Usuarios WHERE usuario = 'coco'), 'Entonces porque cambia a amarillo');
  5. Query OK, 1 ROW affected (0.00 sec)        
  6.  
  7. mysql> INSERT INTO Respuesta VALUES((SELECT id_usuario FROM Usuarios WHERE usuario = 'coco'), (SELECT id_usuario FROM Usuarios WHERE usuario = 'coco'), 'por efecto de alejacion');
  8. Query OK, 1 ROW affected (0.00 sec)
  9.  
  10. mysql> INSERT INTO Respuesta VALUES((SELECT id_usuario FROM Usuarios WHERE usuario = 'maria'), (SELECT id_usuario FROM Usuarios WHERE usuario = 'maria'), 'por la gravedad');
  11. Query OK, 1 ROW affected (0.00 sec)
  12.  
  13. mysql> INSERT INTO Respuesta VALUES((SELECT id_usuario FROM Usuarios WHERE usuario = 'maria'), (SELECT id_usuario FROM Usuarios WHERE usuario = 'maria'), 'Por la densidad');
  14. Query OK, 1 ROW affected (0.00 sec)
  15.  

Quedando en un total asi:

Código
  1.  
  2. mysql> SELECT * FROM Respuesta;                                                                                                                  +------------+--------+--------------------------------------+
  3. | id_usuario | id_res | respuesta                            |
  4. +------------+--------+--------------------------------------+
  5. |          1 |      1 | Es blanco por su iluminacion interna |
  6. |          1 |      1 | Entonces porque cambia a amarillo    |
  7. |          1 |      1 | por efecto de alejacion              |
  8. |          2 |      2 | por la gravedad                      |
  9. |          2 |      2 | Por la densidad                      |
  10. +------------+--------+--------------------------------------+
  11. 5 ROWS IN SET (0.00 sec)
  12.  
  13. mysql> SELECT * FROM Respuesta WHERE id_usuario = ( SELECT id_usuario FROM Usuarios WHERE usuario = 'coco');
  14. +------------+--------+--------------------------------------+
  15. | id_usuario | id_res | respuesta                            |
  16. +------------+--------+--------------------------------------+
  17. |          1 |      1 | Es blanco por su iluminacion interna |
  18. |          1 |      1 | Entonces porque cambia a amarillo    |
  19. |          1 |      1 | por efecto de alejacion              |
  20. +------------+--------+--------------------------------------+
  21. 3 ROWS IN SET (0.00 sec)
  22.  
  23. mysql> SELECT * FROM Respuesta WHERE id_usuario = ( SELECT id_usuario FROM Usuarios WHERE usuario = 'maria');
  24. +------------+--------+-----------------+
  25. | id_usuario | id_res | respuesta       |
  26. +------------+--------+-----------------+
  27. |          2 |      2 | por la gravedad |
  28. |          2 |      2 | Por la densidad |
  29. +------------+--------+-----------------+
  30. 2 ROWS IN SET (0.00 sec)
  31.  
  32.  

PD: Por optimizacion los campos 'usuario' de la tabla Usuarios deberian asignarseles un index para aprovechar la rapidez de consultas:

Código
  1.  
  2. mysql> EXPLAIN SELECT * FROM Respuesta WHERE id_usuario = ( SELECT id_usuario FROM Usuarios WHERE usuario = 'maria');
  3. +----+-------------+-----------+------+---------------+------------+---------+-------+------+-------------+
  4. | id | select_type | TABLE     | TYPE | possible_keys | KEY        | key_len | REF   | ROWS | Extra       |
  5. +----+-------------+-----------+------+---------------+------------+---------+-------+------+-------------+
  6. |  1 | PRIMARY     | Respuesta | REF  | id_usuario    | id_usuario | 2       | const |    2 | USING WHERE |
  7. |  2 | SUBQUERY    | Usuarios  | REF  | indice        | indice     | 11      |       |    1 | USING WHERE |
  8. +----+-------------+-----------+------+---------------+------------+---------+-------+------+-------------+
  9. 2 ROWS IN SET (0.01 sec)
  10.  
  11.  

Lo anterior repito es un mero ejemplo que sirve de guia basica para llevarte a tu objetivo.
676  Programación / Bases de Datos / Re: Se puede hacer esto? en: 23 Noviembre 2009, 18:19 pm
Ahhhhhhhh ok ahora si aplica el ejemplo dado por ti  ;D

Solo si el campo ID_Preguntas(fk) es un INDEX o KEY (En MySQL ya que estos dos no existen en todos los motores).

INDEX o KEY son indices ordinarios, digase acceptan nulos no tienen restricciones de repeticion de valores, por ende son ideales para este caso. El modelado de CarlosNuel es lo mismo como si usases INDEX o KEY en tablas como tu ejemplo, a diferencia que hay que crear una tercera tabla (para mi visualmente estetico mas bonito y organizado  :-* )
677  Programación / Bases de Datos / Re: Se puede hacer esto? en: 23 Noviembre 2009, 17:52 pm
Ok.. aplicando lo que acabas de mostrar (Si es que entendi correctamente).

ID_Preguntas(fk)  No es una llave primaria ni una llave unique. Porque si lo fuese no acceptara los valores repetidos que expones en tu ejemplo. Asumire que ID_Preguntas(fk) es un INDEX de lo contrario no puedes colocar valores repetidos, por esa razon es que hasta ahora me ha gustado mas el modelado de CarlosNuel  :-* (No te sientas celoso Napk no tengo nada contra tu modelado) hasta ahi estamos de acuerdo.

 
Citar
ahora... si no me equivoco cada que haces esto automaticamente se crea la tabla de indices?

Ese punto no lo he entendido muy claro, se genera automaticamente si el motor en este caso MySQL lleva auto_increment o si es otro motor como Oracle pues con sequence... o sino te referias a esto, podrias exponerlo mejor porque no entiendo.
678  Programación / Bases de Datos / Re: Se puede hacer esto? en: 23 Noviembre 2009, 17:14 pm
Precisamente cielo, como las fk no se pueden repetir en que punto van a concordar mi

idpregunta de las tablas Preguntas con idpregunta de la tabla respuesta? No pueden ser iguales, por ende si yo tuviera lo siguiente:

idpregunta       texto
     1               pregunta 'de que color es el sol'

idpregunta        texto
       1             respuesta : Amarillo
       2             respuesta : blanco

La misma pregunta pero no puedo enlazar las mismas respuestas por su valor que no puede repetirse, a no ser claro, que uses una tercera tabla de relacion de 2 indices. Que con fk hasta lo que me concierne no se puede. Hay situaciones donde fk si es efectivo pero hay otras donde bueno... no aplicaria.

Ahora lo anterior con el modelado de CarlosNuel

idpregunta       texto
     1               pregunta 'de que color es el sol'

idpregunta        texto
       1             respuesta : Amarillo
       1             respuesta : blanco

Misma pregunta y sus mismas respuestas.
679  Programación / Bases de Datos / Re: Se puede hacer esto? en: 23 Noviembre 2009, 16:56 pm
Esto deberia ir en el foro de Base de Datos no de PHP como tal  :-*

Me gusta mas el modelado de Carlosnuel (Es que es el modelado antiguo  ;D  y aun funciona) Es cierto 1 pregunta puede tener mas de 1 respuesta, por ende me atrae mas la idea de enlazar esto con una tercera tabla y 2 indices. Ya que si uso fk estas no se pueden repetir...

Aunque al modelado si le cortaria algunos campos para que no se repitan:

Tabla preguntas
- idpregunta
- nombre
- fecha
- pregunta

Tabla Pregunta_respuesta
- index( idpregunta, idrespuesta)

Tabla Respuesta
- idrespuesta
- respuesta

Es solo mi humilde opinion  :P
680  Programación / Bases de Datos / Re: Optimizacion MySQL (Para programadores y DBA) en: 22 Noviembre 2009, 19:20 pm
COMO: Optimizar el tiempo de respuesta de MySQL

Hay muchas maneras de mejorar el tiempo de respuesta del servidor MySQL: al modificar el tamaño de la caché, deteniendo la resolución de DNS ....
Vamos a ver cómo hacerlo.
 
Recuerdo que, una vez en el trabajo, estábamos teniendo problemas con nuestro sistema de bases de datos.  Los servidores MySQL eran lentos para responder, pero cuando se accedia a las máquinas, la carga estaba bien, había bastantes pocas preguntas en marcha, pero MySQL no daba informaron de ella estaba abrumado.
 
1.  Deshabilitar nombre de host DNS Lookup
  Después de buscar la razón por la que el tráfico no iba a la perfección, se determina que el servidor MySQL estaba haciendo un montón de consultas de resolución de nombre!!  ¿Para qué?  ¿Por qué si MySQL solo realizaba conexiones locales?
  Buscando en la página del manual mysqld, encontre que esto podría ser desactivado mediante la adición de la opción - skip-name-resolve.

Bajo sistemas basados en Debian, como Ubuntu, Knoppix ...  y en la mayoría de distribuciones Linux, los archivos de configuración de MySQL están ubicados en / etc / mysql / my.cnf.
 A fin de aplicar la opción - skip-name-resolve cuando arranca mysqld, sólo tiene que añadir:
 
[mysqld]
  .....
  ......
  skip-name-resolve

 NOTA: Cuando se activa esta opción, sólo se puede utilizar números IP en la tabla de permisos de MySQL.
 Aquí hay un pequeño punto de referencia:
 Con una resolución de DNS de nombre de host:

Con una resolución de DNS de nombre de host activa:

 date; mysql-u root-h 192,168 .1 .4; date
  Frid Jul 21 23: 56: 58 CEST 2006
  ERROR 1130 (00000): Host '192 .168.1.3 'no se le permite conectarse a este servidor MySQL
  Frid Jul 21 23: 57: 00 CEST 2006

Vease que se tomo de 2-3 segundos antes de recibir respuesta del servidor que la IP del cliente no puede conectarse.
Una vez que el nombre de host de DNS no está habilitado:

 date; mysql-u root-h 192,168 .1 .4; date
  Frid Jul 21 23: 56: 37 CEST 2006
  ERROR 1130 (00000): Host '192 .168.1.3 'no se le permite conectarse a este servidor MySQL
  Frid Jul 21 23: 56: 37 CEST 2006

 El servidor está respondiendo al instante.

(Solo recomendable para datawarehouse bajo MySQL o tablas en motor donde no se utilize INSERT)

* La cache de consultas (Query Cache) es muy beneficiosa para entornos Datawarehouse
o en tablas con motores comprimidos. Solamente es efectiva en estos tipos puesto
que la cache de MySQL se resetea inmediatamente al utilizar clausulas como
INSERT, UPDATE o DELETE.

Que beneficios otorga tener activada la cache de consultas en MySQL?

* Pues otorga guardar en cache las consultas realizadas, optimizando asi una segunda vez
realizando la misma consulta el tiempo de espera de respuesta mejora en un 260% su rapidez
de respuesta.

 2.  Activar la caché de consultas
 Mediante la comprobación de la memoria caché de consultas:

 mysql> SHOW STATUS LIKE% 'Qcache';

(Si salen todos los valores en 0 es porque la cache esta desactivada, debera ser activada
dentro de my.cnf)

Aca seran mostrados los valores actuales de la cache de consultas y cuantas consultas
estan guardadas en cache para su pronta respuesta:

mysql> show status like 'Qcache%';
+-------------------------+----------+
| Variable_name           | Value    |
+-------------------------+----------+
| Qcache_free_blocks      | 1        |
| Qcache_free_memory      | 16765336 |
| Qcache_hits             | 0        |
| Qcache_inserts          | 2        |
| Qcache_lowmem_prunes    | 0        |
| Qcache_not_cached       | 5        |
| Qcache_queries_in_cache | 2        |
| Qcache_total_blocks     | 7        |
+-------------------------+----------+

8 rows in set (0.00 sec)

En caso de agotarse la cache puede ser modificada dentro del archivo my.cnf

query_cache_size = 52428800;

O de manera temporal dentro del motor (Temporal por si el motor es reiniciado se pierde dicha configuracion)

mysql> SET GLOBAL query_cache_size = 52428800;

PD: Los valores son especificados en bytes, por lo cual traduciendo el valor anterior en MB serian 50MB.
Páginas: 1 ... 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 [68] 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 ... 96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines