Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
Author |
Topic |
alejo46
Posting Yak Master
157 Posts |
Posted - 2012-07-25 : 19:14:54
|
Good afternnoni need your help wit this:for this delete it takes an hour and a half to delete just 10 rows in averagedeletefrom DIM_ACA_ATENCIONWHERE COD_DIM_ATENCION >= '70'AND COD_DIM_ATENCION <= '80'while i run the execution plan for this query not only it shows the execution plan for this table that is an index seek (cost 14%) BUT shows me the execution plan for the table hechos_incioencias (Table scan 41%) because this table has no indexes (i think this is the bottleneck)the table DIM_ACA_ATENCION is being referenced by HECHOS_INCIDENCIAS because a constrainsp_fkeys dim_aca_atencion it shows me a row:PKTABLE_QUALIFIER|PKTABLE_OWNER|PKTABLE_NAME|PKCOLUMN_NAME|FKTABLE_QUALIFIER|FKTABLE_OWNER|FKTABLE_NAME|FKCOLUMN_NAME|KEY_SEQ|UPDATE_RULE|DELETE_RULE|FK_NAME|PK_NAME|DEFERRABILITYdm1_elite|dbo|DIM_ACA_ATENCION|COD_DIM_ATENCION|dm1_elite|dbo|HECHOS_INCIDENCIAS|COD_DIM_ATENCION|1|1|1|FK_HECHOS_INCIDENCIAS_DIM_ACA_ATENCION|PK_DIM_ACA_ATENCION|7what i see the overheat is the lack of an index for one table Ive got 2 questions:1. Dropping the constrain could corrupt data ? (is the right solution ?)2. the second choice is create indexes: sp_helpindex dim_aca_atencion IX_DIM_ACA_ATENCION_NUM_ATENCION_FUENTE nonclustered located on INDICES FUENTE, NUM_ATENCION PK_DIM_ACA_ATENCION nonclustered, unique, primary key located on INDICES COD_DIM_ATENCIONsp_helpindex hechos_incidenciasThe object does not have any indexes.could i create indexes on both tables by the column fec_historico which is in both tables, or create just an index in the table hechos_incidencias by the colum com_dim_aca_atencion ?which of the 2 choices is the right one ?thanks for your help |
|
russell
Pyro-ma-ni-yak
5072 Posts |
Posted - 2012-07-25 : 21:07:58
|
Seems you have cascading deletes.You'd do better to delete from the child tables first, then the parent table.Cascading FKs are a serious design flaw. I don't permit them in my databases. They produce difficult to track down bugs, cause unexpected data loss, and lead to issues like you're experiencing now. |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2012-07-26 : 01:42:21
|
If you start a transaction, drop the fk constraints, do the deletes and then recreate the fk constraints and then either commit or rollback the transaction, you will be fine data quality wise.And it will probably run much faster too. N 56°04'39.26"E 12°55'05.63" |
|
|
alejo46
Posting Yak Master
157 Posts |
Posted - 2012-07-26 : 12:19:31
|
OK Thanks, in order to use the code for finding out recursively the object relationships and then delete from tables the dependentrecords, to be honest, i have no idea and i dont undesrtand the logic, but i know it it has something to do with Common table expresion in which ive got to learn intensely by myselfhowever, ive got 2 questions:1. within the code with parameters should i replace to relate the objects. ;with object_cte(tblid,tblname,rtblid,rtblname,level)2. within the code i din't see the sentence to do the deleteFor the third advise what do you mean with a start a transacation and is strongly necessary ?2 drop the fk constraints, do the deletes and then recreate the fk constraints and then either commit or rollback the transaction, you will be fine data quality wise.And it will probably run much faster too.could be ALTER TABLE hechos_incidenciasDROP CONSTRAINT FK_t1idALTER TABLE hechos_incidenciasADD CONSTRAINT FK_t1id FOREIGN KEY (t1id) REFERENCES t1 (t1id) ON DELETECASCADEThanks in advance |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2012-07-26 : 12:58:21
|
quote: Originally posted by alejo46 OK Thanks, in order to use the code for finding out recursively the object relationships and then delete from tables the dependentrecords, to be honest, i have no idea and i dont undesrtand the logic, but i know it it has something to do with Common table expresion in which ive got to learn intensely by myselfhowever, ive got 2 questions:1. within the code with parameters should i replace to relate the objects. ;with object_cte(tblid,tblname,rtblid,rtblname,level) you dont have to replace anything.they're fields within CTE2. within the code i din't see the sentence to do the delete the given stub contains logic to return objects in correct order. you need to add DELETE table part in last select and generate the delete script using object namesFor the third advise what do you mean with a start a transacation and is strongly necessary ?2 drop the fk constraints, do the deletes and then recreate the fk constraints and then either commit or rollback the transaction, you will be fine data quality wise.And it will probably run much faster too.could be ALTER TABLE hechos_incidenciasDROP CONSTRAINT FK_t1idALTER TABLE hechos_incidenciasADD CONSTRAINT FK_t1id FOREIGN KEY (t1id) REFERENCES t1 (t1id) ON DELETECASCADEThanks in advance
------------------------------------------------------------------------------------------------------SQL Server MVPhttp://visakhm.blogspot.com/ |
|
|
|
|
|
|
|