I have one database that's not normalized:
disciplinabd.movies:
CREATE TABLE dbo.movies
(
movieid VARCHAR (20) NULL,
title VARCHAR (400) NULL,
mvyear VARCHAR (100) NULL,
actorid VARCHAR (20) NULL,
actorname VARCHAR (250) NULL,
sex CHAR (1) NULL,
as_character VARCHAR (1500) NULL,
languages VARCHAR (1500) NULL,
genres VARCHAR (100) NULL
)
And i have my database: labbd11 , where i'm gonna normalize those data from disciplinabd. So i'm trying to execute this query:
INTO labbd11..movie_actor(idMovie, idActor, idCharacter)
SELECT CASE
WHEN IsNumeric(movies.movieid+ '.0e0') <> 1 THEN NULL
ELSE CAST (movies.movieid AS INT)
END,
CASE WHEN IsNumeric(movies.actorid+ '.0e0') <> 1 THEN NULL
ELSE CAST (movies.actorid AS INT)
END,
(SELECT id FROM actor_character WHERE character = movies.as_character)
FROM disciplinabd..movies
It executes normally, but is a huge number of data where I have to do this , like 14 million of rows in disciplinabd.movies.
My questions are:
- There's how to improve my insert ?
- Can i do a insert something like
insert (1, 1000) ...after finished i just change the values likeinsert( 1001, 2000) ..and go on. What i'm saying is , if there's any chance insert in my database little by little ? This way i can avoid the rollback operation if the connection broke. Yesterday this insert query runs for 16 hours then the connection broke and i lost all the work.
UPDATE
CREATE TABLE movie(
id INT PRIMARY KEY,
title VARCHAR(400) NOT NULL,
year INT
)
CREATE TABLE actor (
id INT PRIMARY KEY,
name VARCHAR(250) NOT NULL,
sex CHAR(1) NOT NULL
)
CREATE TABLE actor_character(
id INT PRIMARY KEY IDENTITY,
character VARCHAR(1000)
)
CREATE TABLE movie_actor(
idMovie INT,
idActor INT,
idCharacter INT,
CONSTRAINT fk_movie_actor_1 FOREIGN KEY (idMovie) REFERENCES movie(id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_movie_actor_2 FOREIGN KEY (idActor) REFERENCES actor(id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_movie_actor_3 FOREIGN KEY (idCharacter) REFERENCES actor_character(id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT pk_movie_actor PRIMARY KEY (idMovie,idActor, idCharacter)
)
labbd11..movie_actortable? I would have thought inserting 14 million rows of datatypeint,int,intshould take much less than an hour even on my laptop. Do you have an index onactor_character.character?