una soporta segundo rapida por optimizar optimizacion mas lentas lenta hacer cuantas consultas consulta como agilizar sql database

sql - soporta - Cómo almacenar una lista en una columna db



optimizar consultas mysql explain (6)

Algunas bases de datos permiten que se almacenen múltiples valores en una sola columna de una sola fila, pero generalmente es más conveniente usar una tabla separada.

Cree una tabla con dos columnas, una que contenga punteros a la clave principal de la tabla de objetos y otra que contenga punteros a la clave principal de la tabla de figuras. Entonces, si un objeto tiene tres frutas, hay tres filas en la tabla object_fruit que apuntan todas al mismo objeto, pero a tres frutas diferentes.

Me gustaría almacenar un objeto FOO en una base de datos. Digamos que FOO contiene tres enteros y una lista de " Frutas ".

La lista puede tener cualquier longitud, lo único que sé es que todas las frutas permitidas se almacenan en otra tabla.

¿Puedo guardar la lista de frutas en una columna?


En una base de datos relacional normalizada, tal situación es inaceptable. Debería tener una tabla de unión que almacene una fila para cada ID distinta del objeto FOO y la ID de la fruta. La existencia de tal fila significa que la fruta está en esa lista para el FOO.

CREATE TABLE FOO ( id int primary key not null, int1 int, int2 int, int3 int ) CREATE TABLE Fruits ( id int primary key not null, name varchar(30) ) CREATE TABLE FOOFruits ( FruitID int references Fruits (ID), FooID int references FOO(id), constraint pk_FooFruits primary key (FruitID, FooID) )

Para agregar fruta de Apple a la lista de un objeto FOO específico con ID = 5, deberá:

INSERT FOOFruits(FooID, FruitID) SELECT 5, ID FROM Fruits WHERE name = ''Apple''


Puede, pero probablemente se tratará como texto, lo que dificulta y ralentiza la búsqueda en esta columna. Es mejor que uses una tabla relacionada.


Si está seguro de lo que está haciendo (es decir, no necesitará buscar los valores de la lista, por ejemplo), también puede serializar su objeto, o simplemente el objeto de la lista, y almacenarlo en un archivo binario columna.

Solo separar los valores puede ser bueno también, y más económico en términos de guardar y cargar, pero tenga cuidado de que sus datos no contengan el carácter separador, o escape de él (y maneje los escapes en consecuencia mientras lo carga, etc. sin embargo, el lenguaje de elección puede hacer un mejor trabajo en esto que tú;;))

Sin embargo, para una solución "adecuada", haz lo que Mehrdad describió anteriormente.


Su diseño técnicamente posible pero sería muy pobre, imo.

Puede hacerlo construyendo la cadena y almacenándola en un campo nvarchar (max) (si usa el servidor sql o su equivalente).


INSERT FOOFruits (FooID, FruitID) SELECT 5, ID FROM Fruits WHERE name IN (''Apple'', ''Orange'');