Why indexes are not speeding up multiple join query OK so I have 3 tables: contacts, notes and lastContact.

Questions are:
1) Whenever I want to do a double join of contacts to the other 2 tables the queries explode in time going to up to 15-60 mins.
2) Why with the current indexes just the count of the the primary key in the main table to the other 2 tables take that much time?

They both have a key in common, unique except for notes.

(Structure simplified removing all unnecessary columns)

    CREATE TABLE `contacts` (
    `contactID` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `firstName` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL,
    `lastName` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL,
    `phone` varchar(16) COLLATE utf8_unicode_ci DEFAULT NULL,
    `mobilePhone` varchar(16) COLLATE utf8_unicode_ci DEFAULT NULL,
    `altPhone` varchar(16) COLLATE utf8_unicode_ci DEFAULT NULL,
    `street` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
    `city` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL,
    `state` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL,
    `postalCode` varchar(12) COLLATE utf8_unicode_ci DEFAULT NULL,
    `email` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL,
    `source` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL,
    `owner` varchar(64) unsigned DEFAULT NULL,
    PRIMARY KEY (`contactID`),
    KEY `phone` (`phone`),
    KEY `phones` (`phone`,`mobilePhone`,`altPhone`),
    KEY `owner` (`owner`),
    KEY `source` (`contactID`,`source`,`owner`)
    ) ENGINE=InnoDB AUTO_INCREMENT=119138 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

    CREATE TABLE `contacts_notes` (
    `noteID` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `contactID` int(10) unsigned DEFAULT NULL,
    `notes` text,
    `dateline` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`noteID`),
    KEY `contactID` (`contactID`)
    ) ENGINE=Aria AUTO_INCREMENT=1486 DEFAULT CHARSET=utf8 PAGE_CHECKSUM=1;

    CREATE TABLE `lastContacts` (
    `contactID` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
    `ultimo` datetime DEFAULT NULL,
    `callID` int(10) unsigned DEFAULT NULL,
    `userName` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL,
    `lastContact` datetime DEFAULT NULL,
    `callCount` tinyint(3) unsigned DEFAULT NULL,
    PRIMARY KEY (`contactID`),
    KEY `callid` (`callID`),
    KEY `ultimo` (`ultimo`),
    KEY `username` (`userName`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


There are ~50k records in contacts and lastContacts, contact_notes has ~1k.

The query is:

SELECT COUNT(*) total FROM (
    SELECT l.contactID FROM contacts l
    LEFT JOIN lastContacts lc ON l.contactID = lc.contactID
    WHERE lc.contactID IS NULL 
) x 
LEFT JOIN contacts_notes ln ON x.contactID = ln.contactID
WHERE  ln.contactID IS NULL
@Jehad Keriaki provided the answer. The lastContacts table's primary key column, ContactID, was defined as a string while the same column in each of the other tables was an integer. Joining tables on that column caused implicit conversion and resulted in poor performance.