J'ai des clients et des prospects provenant de différentes sources et j'ai besoin de savoir si le client est déjà enregistré en tant que lead.Correspondance de données MySQL: de meilleures options?
J'utilise 12 champs pour la correspondance:
address1_clear
address2_clear
address_clear
contact_name_clear
email
invoice_mobile
invoice_phone
mobile
name_clear
phone
phone2
taxnum
(_clear
suffixe signifie que les données sont en minuscules, w/o espace blanc et la ponctuation).
- conduit - 300k records
- clients - 500k records
- customers_leads - 460K enregistre
C'est la requête utilisée pour effectuer une correspondance:
SELECT l.id as lead_id, c.id as customer_id FROM lead l
INNER JOIN sync_settings s ON s.account_id = l.account_id
INNER JOIN customers c ON c.setting_id = s.id
LEFT JOIN customers_leads cl ON cl.customer_id = c.id AND cl.lead_id = l.id
WHERE cl.lead_id IS NULL AND
(
(l.phone IS NOT NULL AND l.phone IN (c.phone, c.phone2, c.invoice_phone, c.invoice_mobile)) OR
(l.mobile IS NOT NULL AND l.mobile != "" AND l.mobile IN (c.phone, c.phone2, c.invoice_phone, c.invoice_mobile)) OR
(l.invoice_phone IS NOT NULL AND l.invoice_phone != "" AND l.invoice_phone IN (c.phone, c.phone2, c.invoice_phone, c.invoice_mobile)) OR
(l.invoice_mobile IS NOT NULL AND l.invoice_mobile != "" AND l.invoice_mobile IN (c.phone, c.phone2, c.invoice_phone, c.invoice_mobile)) OR
(l.email IS NOT NULL AND l.email != "" AND l.email = c.email) OR
(l.taxnum IS NOT NULL AND l.taxnum != "" AND l.taxnum = c.taxnum) OR
(l.contact_name_clear IS NOT NULL AND l.contact_name_clear != "" AND l.contact_name_clear = c.contact_name_clear) OR
(l.address1_clear IS NOT NULL AND l.address1_clear != "" AND l.address1_clear = c.address_clear) OR
(l.address2_clear IS NOT NULL AND l.address2_clear != "" AND l.address2_clear = c.address_clear) OR
(l.name_clear IS NOT NULL AND l.name_clear != "" AND l.name_clear IN (c.contact_name_clear, c.name_clear))
)
Il est super lourd , le temps de réponse est ~ 4 minutes. L'indexation n'a pas beaucoup aidé à cause des OR et des conditions supplémentaires.
Je voudrais savoir: existe-t-il une meilleure façon de le faire? Peut-être en utilisant une base de données NoSQL pour construire une énorme table de hachage essentiellement ou une technique de correspondance de données que je ne pouvais pas google? Je suis conscient que je peux faire des tableaux séparés uniquement pour les champs correspondants et ce sera plus rapide, mais j'aimerais quand même connaître mes alternatives.