FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Creo que me he expresado mal.
Las pruebas y cambios que hago es sobre los indices. El callejero, salvo la alimentacion inicial de datos, no sufre variaciones hasta dentro de un par de años. Esto quiere decir que supuestamente la tabla no tiene inserciones ni modificaciones, solo se realizan busquedas sobre ella Lo que decia es que probe con una tabla con menos registros |
#2
|
||||
|
||||
Básicamente cualquier motor de datos tiene un buen sistema de manejo de indices y mas si es de gama medio o alta (sql server, oracle, postgress, etc).
Algunas ideas generales: http://www.sql-server-performance.co...eneral_p1.aspx Si necesitas ver que pasa con un indice usas el Sql profiler & el Index Tuning Wizard. Primero que nada, no te pongas a agregar indices a la loca. Un indice es como una tabla extra. Aumenta la CPU, el acceso I/O e implica hacer saltos entre los indices y la tabla fisica. Un numero excesivo de indices puede tener un impacto negativo. Pero mas que nada, la eficiencia es en *como* almacenas los datos. El indice es solo una ayuda auxiliar. De hecho, a veces es posible que un indice de un resultado adverso o inutil (ej: Indexar sobre un campo booleano, donde casi al 50% uno es 0 y el otro es 1: No sirve pa nada de nada el indice). Lo que debes saber es que existe una regla: optimizas por espacio, o por velocidad. La forma de acelerar las consultas es expandir el dataset. Una BD es *muy* feliz si los datos se los dan mascaditos y lo unico que debe hacer es recorrer de arriba a abajo, saltando por medio de inidices sobre datos de longitud fija. Esa es el mejor caso. Un ejemplo clasico son las fechas. Una fecha se almacena por ejemplo asi: 01/01/2010. Ahora necesitas buscar los registros del año 2010. lo normal, una funcion tipo YEAR(fecha).... lo cual mata el indice (= no se usa!). La forma de acelerar es partir la fecha en 3 columnas: Año, mes, dia e indexar si los cambios en cada una son variables... O sea, si en Año solo hay 2010, 2011 meter indice puede ser casi inutil. En tal caso, mete los datos preordena los datos.. en vez de : 2011 2010 2011 Que esten 2010 2011 2011 (Eso es en Sql server un indice *clustered*). En mi aplicacion de iphone, donde existen recursos mas limitados de CPu/Memoria ese solo cambio logro que una consulta pasara de unos 5-10 segundos a milisegundos. Sin meter indices!! Otro ejemplo? Otro cambio que me bajo de 10 segundos a milisegundos: Ordenar/Buscar por nombre. Supongamos que debemos buscar todos los nombres que empiezan por 'A'. Supongase que existen 100 registros que cumplen, de 1 millon en total. La forma pendeja es - pero practica en la gigantesca mayoria de los casos-:
Dependiendo del motor, es una busqueda de 1 millon de registros. Sin embargo, es mas eficiente si agregas una columna llamada IndexName y que guardas la primera letra. Ahora queda asi:
En *cualquier* motor, es una busqueda de 100 registros. Eso acorta la consulta porque: 1) De entrada se filtra a solo lo que empieza por A en IndexNombre 2) Luego, la BD busca de esa porcion, el nombre La gracia del truco se ve si Buscas por 'Alfo' para encontrar 'Alfonso'. Ahora, primero se limita la busqueda a 100 registros y sobre ellos, se hace un table scan pa encontrar los 5 o 10 que sean alfonso. ---- En resumen, no es solo indices. Si quieres maximizar la eficiencia, es *como* almacenas los datos. Mientras mas *plano* (menos funciones, menos joins, filtrar de izq a derecha lo mas global a lo mas concreto -o al revez, no se su es igual en cada motor).
__________________
El malabarista. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Sistema de Notificacion de Produccion y Eficiencia | Fiebru | Debates | 0 | 04-01-2010 15:18:10 |
La eficiencia de una conexión ADO | gcaffe | Conexión con bases de datos | 1 | 24-05-2007 18:03:26 |
como sacar el numero que mas se repite? | ddd_ddd | SQL | 6 | 27-04-2006 18:35:39 |
Eficiencia master/detail | Luis Castillo | Conexión con bases de datos | 2 | 08-11-2005 18:25:04 |
Como sacar datos de un DBgrid? | Durbed | Conexión con bases de datos | 2 | 01-09-2004 08:29:06 |
|