Je suis confronté à des problèmes de performance avec mon sqlcode. Utilisation de la plate-forme Tableaune peut pas joindre les tables correctement. temps infini pris par la requête
J'ai environ 11 jointures de tables. quand je débogue pour voir la performance des 10 tables jointes, c'est très rapide dans le tableau mais quand j'ajoute une autre table de billing_transaction
, la requête ne se termine jamais même avec un petit ensemble de lignes.
Here est la DRE de la base de données entière. Quel pourrait être le problème que sa création d'une longue requête?
Voici le code SQL (je l'ai commenté la section sans DE tableau billing_transaction, faisait pour comparer les performances)
select
country.`name` as Country,
oper.`name` as Operator,
proj.`name` as Project,
club.`name` as Club,
prom.`name` as Promotor,
cust.`idCustomer` as SubscriberID,
cust_sub.`msisdn` as SubscriberMsidn,
cust.`customerSince` as SubscriberStartingDate,
cust_sub.`SubscribedDate` as SubscriberSubcribeDate,
cust_sub.`UnsubscribedDate` as SubscriberUnSubcribeDate,
cust_sub.`idCustomerSubscription` as SubscriptionID,
bt.`idBillingTransaction` as BillingTransactionID,
cust_sub.`eventId` as SubscriberEventID,
bt_status.`name` as BillingStatus,
bt.`price` as Pricefromsubscriber
-- FROM `customersubscription` cust_sub (WITHOUT billing_transaction it WORKS FINE)
-- LEFT JOIN `customer` cust on cust_sub.`idCustomer`=cust.`IdCustomer`
-- LEFT JOIN `promoter` prom on cust_sub.`idPromoter`=prom.`id`
-- LEFT JOIN `club` club on cust_sub.`idClub`=club.`idClub`
-- LEFT JOIN `Project` proj on club.`idProject`=Proj.`idProject`
-- LEFT JOIN `project_operator_relationships` proj_rel_oper on proj.`idProject`=proj_rel_oper.`projectId`
-- LEFT JOIN `Operator` as oper on proj_rel_oper.`operatorId`=oper.`idOperator`
-- LEFT JOIN `country` as country on oper.`idCountry`=country.`idCountry`
-- LEFT JOIN `curreny_symbol` as curr_sym on country.`idCurrencySymbol`=curr_sym.`symbol`,
FROM `billing_transaction` bt
LEFT JOIN `customersubscription` cust_sub on bt.`msisdn`=cust_sub.`msisdn`
LEFT JOIN `customer` cust on cust.`idCustomer`=cust_sub.`IdCustomer`
LEFT JOIN `billing_status` bt_status on bt.`idBillingStatus`=bt_status.`idBillingStatus`
LEFT JOIN `promoter` prom on cust_sub.`idPromoter`=prom.`id`
LEFT JOIN `club` club on cust_sub.`idClub`=club.`idClub`
LEFT JOIN `Project` proj on club.`idProject`=Proj.`idProject`
LEFT JOIN `project_operator_relationships` proj_rel_oper on proj.`idProject`=proj_rel_oper.`projectId`
LEFT JOIN `Operator` as oper on proj_rel_oper.`operatorId`=oper.`idOperator`
LEFT JOIN `country` as country on oper.`idCountry`=country.`idCountry`
LEFT JOIN `curreny_symbol` as curr_sym on country.`idCurrencySymbol`=curr_sym.`symbol`
where proj.`idProject` IN (3, 19)
-- where proj.`idProject` IN (3, 19, 23, 24, 27)
and date(cust_sub.`SubscribedDate`)>='2017-04-18 01:40:00'
and date(cust_sub.`SubscribedDate`)< '2017-04-18 02:00:00'
Toutes les suggestions seront très appréciés. Déboguer tout mais je ne sais pas où sont les problèmes de performance. Mon approche (qui peut être erronée) est que, en prenant les tables billing_transaction, continuez à rejoindre et à additionner les informations dans les colonnes suivantes des lignes comme l'abonnement client , clients, opérateur, club, projet .... tout le chemin vers le pays. La jointure gauche convient-elle à un tel scénario? De même, la clause where doit provenir de la table billing_transaction (table principale) ou de la clause where de n'importe quelle table des tables jointes.
La séquence va comme ceci
Each customer has one or more subscription
Each Subscription has one or more billing transaction
Each billing transaction has one or more billing status
Other relations are:
Each customer subscription have one or more club
Each customer subscription has one or more promotor
Each club has one or more project
Each project has one or more operator
Each operator has one or more countries
Each country has one or more currency
suggérer créer un violon afin que nous puissions jouer – maSTAShuFu
sens du violon? – PythonDev
sqlfiddle.com afin que vous puissiez créer votre schéma – maSTAShuFu