Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Índices sobre columnas VARCHAR

Estas en el tema de Índices sobre columnas VARCHAR en el foro de Mysql en Foros del Web. Hola, estoy creando una base de datos para guardar la información de los logs de un servidor web. Hay una tabla que almacena la información ...
  #1 (permalink)  
Antiguo 04/12/2007, 11:31
dre
 
Fecha de Ingreso: enero-2007
Mensajes: 11
Antigüedad: 17 años, 2 meses
Puntos: 0
Índices sobre columnas VARCHAR

Hola, estoy creando una base de datos para guardar la información de los logs de un servidor web. Hay una tabla que almacena la información para cada acceso: nº de bytes transferidos, código resultado de la operación, hora, etc... el caso es que también guardo las URL en un campo VARCHAR de tamaño 2000. Creé índices para acelerar las consultas ya que es una BD bastante gorda (ahora mismo tiene más de 43 millones de registros) y tampoco es imprescindible que haga consultas instantáneas (un retardo de un par de segundos es aceptable), pero sí es necesario que responda en un periodo de tiempo razonable. Bueno, pues para los índices sobre campos numéricos y fechas va como la seda, pero cuando consulto campos de texto como el de las urls o las ips, se comporta de una forma muy extraña incluso haciendo búsquedas casi idénticas. Por ejemplo, a esta consulta:

select * from REQUESTS where DATE_TIME>"2006-05-05 00:00:00" and DATE_TIME>"2006-05-06 00:00:00" and URL like "/index.php?pagina=%"

Responde relativamente rápido. Sin embargo, si le añado unos carácteres más al criterio de la url, de esta forma:

select * from REQUESTS where DATE_TIME>"2006-05-05 00:00:00" and DATE_TIME>"2006-05-06 00:00:00" and URL like "/index.php?pagina=noticias%"

Se queda ahí un buen rato haciendo la consulta. La tabla está definida de esta forma:

CREATE TABLE 'logs'.'REQUESTS' (
'SESSION' varchar(20) NOT NULL default '',
'DATE_TIME' datetime NOT NULL default '0000-00-00 00:00:00',
'URL' varchar(2000) NOT NULL default '',
'RETURN_CODE' smallint(5) unsigned NOT NULL default '0',
'BYTES' bigint(20) NOT NULL default '0',
'REFERRER' varchar(2000) NOT NULL default '',
KEY 'SESSIONS_ID' ('SESSION'),
KEY 'index_date' ('DATE_TIME'),
KEY 'index_url' ('URL'(1000)),
KEY 'index_referrer' ('REFERRER'(1000)),
)

Supongo que será algo relacionado con el funcionamiento interno de los índices que desconozco, pero la verdad es que no tengo ni idea, no tengo mucha experiencia en bases de datos. A ver si alguien sabe decirme algo, un saludo.
  #2 (permalink)  
Antiguo 04/12/2007, 11:40
Avatar de emiliodeg  
Fecha de Ingreso: septiembre-2005
Ubicación: Córdoba
Mensajes: 1.830
Antigüedad: 18 años, 7 meses
Puntos: 55
Re: Índices sobre columnas VARCHAR

el problema esta q un varchar solo soporta hasta 255 caracteres si necesitas 2000 deberas utilizar el tipo text por ejemplo
__________________
Degiovanni Emilio
developtus.com
  #3 (permalink)  
Antiguo 05/12/2007, 07:13
dre
 
Fecha de Ingreso: enero-2007
Mensajes: 11
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: Índices sobre columnas VARCHAR

Ok es verdad, sólo es hasta 255 carácteres. Pues no entiendo por qué no me da un warning o un error cuando le índico 2000 de tamaño a una columna varchar...

Bueno al final cambié los varchar grandes por text, y leyendo sobre índices de ristras, vi los fulltext y las búsquedas match...against. Los probé y la verdad es que son rapidísimos comparados con las búsquedas like, aunque hay un pero. Si quiero buscar por ejemplo la url "www.ulpgc.es/index.php?pagina=noticias" y hago este query:

select * from REQUESTS where match(REFERRER) against ("www.ulpgc.es/index.php?pagina=noticias")

Me devuelve urls de ese estilo, por ejemplo "http://www.ulpgc.es/index.php?pagina=noticias&ver=listado", pero además cosas parecidas como "http://www.ulpgc.es/index.php?pagina=titulaciones&ver=inicio", o incluso urls que no tienen nada que ver, como "http://www.csocial.ulpgc.es" o "http://uk.ask.com/web?....". Es como si trocease la cadena en palabras y buscase cualquiera de ellas.

Entonces la pregunta es, como puedo hacer que me busque exactamente una url?
  #4 (permalink)  
Antiguo 05/12/2007, 07:29
dre
 
Fecha de Ingreso: enero-2007
Mensajes: 11
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: Índices sobre columnas VARCHAR

Me respondo:

select * from REQUESTS where match(REFERRER) against (' "www.ulpgc.es/index.php?pagina=noticias" ', IN BOOLEAN MODE)

Indicando la opción "IN BOOLEAN MODE", el texto entre comillas lo busca exactamente como está.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:31.