Vincent,

Since the column is indexed, it would use the index during the delete.

regards
anandkl

On Thu, Sep 9, 2010 at 5:47 AM, Daevid Vincent <dae...@daevid.com> wrote:

> I am curious about something.
>
> I have a "glue" or "hanging" table like so:
>
> CREATE TABLE `fault_impact_has_fault_system_impact` (
>  `id_fault_impact` int(10) unsigned NOT NULL,
>  `id_fault_system_impact` smallint(5) unsigned NOT NULL,
>  KEY `fault_impact_key` (`id_fault_impact`,`id_fault_system_impact`),
>  KEY `id_fault_system_impact` (`id_fault_system_impact`),
>  CONSTRAINT `fault_impact_has_fault_system_impact_ibfk_1` FOREIGN KEY
> (`id_fault_impact`) REFERENCES `fault_impact` (`id_fault_impact`) ON DELETE
> CASCADE ON UPDATE CASCADE,
>  CONSTRAINT `fault_impact_has_fault_system_impact_ibfk_2` FOREIGN KEY
> (`id_fault_system_impact`) REFERENCES `fault_system_impact`
> (`id_fault_system_impact`) ON DELETE CASCADE ON UPDATE CASCADE
> )
>
> And a lookup table like this:
>
> CREATE TABLE `fault_system_impact` (
>  `id_fault_system_impact` smallint(5) unsigned NOT NULL auto_increment,
>  `fault_sytem_impact_name` varchar(50) NOT NULL,
>  PRIMARY KEY  (`id_fault_system_impact`)
> )
>
> I have a bunch of checkboxes in a <FORM> and so in order to "update"
> properly, I wipe out all the PK IDs and then start inserting. It looks like
> this:
>
> UPDATE `fault_impact` SET `bite_code` = '12', `bite_code_type` = '32',
> `bite_subcode` = '21', `description_text` = 'Some random fault description
> here.', `fault_id` = '11-11111', `fault_impact_other_explain` = '',
> `id_fault_area_impact` = '3', `symptom_lru_id` = '232', `symptom_lru_subid`
> = '34', `sys_perf_affected` = '', `update_date` = '2010-09-09 00:04:29'
> WHERE id_fault_impact = '2495' LIMIT 1;
>
> DELETE FROM fault_impact_has_fault_system_impact WHERE id_fault_impact =
> 2495;
>
> INSERT INTO
> fault_impact_has_fault_system_impact(`id_fault_impact`,`id_fault_system_imp
> act`) VALUES(2495, 1);
> INSERT INTO
> fault_impact_has_fault_system_impact(`id_fault_impact`,`id_fault_system_imp
> act`) VALUES(2495, 3);
> INSERT INTO
> fault_impact_has_fault_system_impact(`id_fault_impact`,`id_fault_system_imp
> act`) VALUES(2495, 2);
> INSERT INTO
> fault_impact_has_fault_system_impact(`id_fault_impact`,`id_fault_system_imp
> act`) VALUES(2495, 7);
> INSERT INTO
> fault_impact_has_fault_system_impact(`id_fault_impact`,`id_fault_system_imp
> act`) VALUES(2495, 10);
> INSERT INTO
> fault_impact_has_fault_system_impact(`id_fault_impact`,`id_fault_system_imp
> act`) VALUES(2495, 14);
> INSERT INTO
> fault_impact_has_fault_system_impact(`id_fault_impact`,`id_fault_system_imp
> act`) VALUES(2495, 9);
> INSERT INTO
> fault_impact_has_fault_system_impact(`id_fault_impact`,`id_fault_system_imp
> act`) VALUES(2495, 4);
>
> Given that I know there can only be a maximum of id_fault_system_impact IDs
> -- currently there are 17 rows in the fault_system_impact table -- and
> they're unique to any given id_fault_impact, would it benefit me to change
> my DELETE statement to something like this:
>
> DELETE FROM fault_impact_has_fault_system_impact WHERE id_fault_impact =
> 2495 LIMIT 17;
>
> Since the fault_impact_has_fault_system_impact table could have thousands
> of rows and it seems that mySQL would do a table scan? Unfortunately, you
> can't "EXPLAIN" on a DELETE to see what it might be doing. :( OR is mySQL
> smart enough to know that the id_fault_impact is an index and therefore it
> will just be right quick and stop after deleting those 8 rows above?
>
>
>
>
>
> --
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe:    http://lists.mysql.com/mysql?unsub=anan...@gmail.com
>
>

Reply via email to