I have a table that looks like:
CREATE TABLE `connections` (
`connection_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`service_id` smallint(5) unsigned DEFAULT NULL,
`parent_id` bigint(20) unsigned DEFAULT NULL,
`child_id` bigint(20) unsigned DEFAULT NULL,
PRIMARY KEY (`connection_id`),
UNIQUE KEY `primary_child` (`parent_id`,`child_id`),
UNIQUE KEY `child_primary` (`child_id`,`parent_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
I need to do lookups on child_id and get information about parent_id and vice versa.
Ie:
SELECT COUNT(`parent_id`) FROM `connections` WHERE `child_id` = 'x'
or
SELECT COUNT(`child_id`) FORM `connections` WHERE `parent_id` = 'x'
And some more advanced queries like:
SELECT DISTINCT `parent_id`
FROM `connections` `c1`
INNER JOIN `connections` `c2`
ON `c1`.`parent_id` = `c2`.`parent_id`
WHERE `c1`.`child_id` = 'x'
AND `c2`.`child_id` = 'y'
I'm looking to get a better idea of the most efficient index structure to get quick responses from all the above query examples.
It should be noted that the child/parent pairs will be unique.
EDIT: This table currently holds 40M rows, likely to be much larger in the near future.
Thanks,
DISTINCT
is not needed in the 2nd query.