Uma*_*air 5 mysql performance optimization query-performance
我有一个包含 128'914'635 行的表。某些列的基数(即地址、姓氏、名字)等于表中的总行数 (128'914'635)。这个表上的查询真的很慢,当我在连接中使用这个表时,它们不使用任何索引。
你有什么想法为什么基数等于表中的总数或行数?
我们在下面的问题中描述了一个类似的问题。唯一的区别是我们有相同的整理表,而 Explain Extended 没有显示显式转换。
但是为什么仍然没有使用索引并且字段(地址字段)的基数与表行数相同?
CREATE TABLE `Datasupplied_Consumer_Final` (
`AddressID` varchar(100) DEFAULT NULL,
`IndividualId` varchar(100) DEFAULT NULL,
`personfirstname` char(30) DEFAULT NULL,
`personmiddleinitial` char(1) DEFAULT NULL,
`personlastname` char(30) DEFAULT NULL,
`PersonSurnameSuffix` varchar(100) DEFAULT NULL,
`persontitleofrespect` varchar(100) DEFAULT NULL,
`housenumber` varchar(100) DEFAULT NULL,
`predirection` varchar(100) DEFAULT NULL,
`streetname` varchar(100) DEFAULT NULL,
`streetsuffix` varchar(100) DEFAULT NULL,
`postdirection` varchar(100) DEFAULT NULL,
`unitdesignator` varchar(100) DEFAULT NULL,
`unitdesignatornumber` varchar(100) DEFAULT NULL,
`primaryaddress` char(47) DEFAULT NULL,
`secondaryaddress` char(12) DEFAULT NULL,
`state` varchar(2) DEFAULT NULL,
`ZipCode` varchar(5) DEFAULT NULL,
`Zip_4` varchar(4) DEFAULT NULL,
`del_point_check_digit` varchar(100) DEFAULT NULL,
`msa` varchar(100) DEFAULT NULL,
`countycode` varchar(100) DEFAULT NULL,
`countyname` varchar(100) DEFAULT NULL,
`citynameabbr` varchar(100) DEFAULT NULL,
`cityname` char(30) DEFAULT NULL,
`carrier_route` varchar(100) DEFAULT NULL,
`censustract` varchar(100) DEFAULT NULL,
`censusblock` varchar(100) DEFAULT NULL,
`latitude` varchar(100) DEFAULT NULL,
`longitude` varchar(100) DEFAULT NULL,
`timezone` varchar(100) DEFAULT NULL,
`Xaxis` varchar(100) DEFAULT NULL,
`Yaxis` varchar(100) DEFAULT NULL,
`Zaxis` varchar(100) DEFAULT NULL,
`dpv_code` varchar(100) DEFAULT NULL,
`NumberOfSources` varchar(100) DEFAULT NULL,
`dwellingtype` varchar(100) DEFAULT NULL,
`secondaryaddresspresent` varchar(100) DEFAULT NULL,
`livingunitid` varchar(100) DEFAULT NULL,
`RDID` varchar(100) DEFAULT NULL,
`areacode` varchar(100) DEFAULT NULL,
`Phone` varchar(100) DEFAULT NULL,
`estimatedincomecode` varchar(100) DEFAULT NULL,
`homeownerprobabilitymodel` varchar(100) DEFAULT NULL,
`lengthofresidence` varchar(100) DEFAULT NULL,
`lengthofresidencecode` varchar(100) DEFAULT NULL,
`numberofpersonsinlivingunit` varchar(100) DEFAULT NULL,
`presenceofchildren` varchar(100) DEFAULT NULL,
`NumberOfChildren` varchar(100) DEFAULT NULL,
`ChildrenAge00_02` varchar(100) DEFAULT NULL,
`ChildrenAge00_02Male` varchar(100) DEFAULT NULL,
`ChildrenAge00_02Female` varchar(100) DEFAULT NULL,
`ChildrenAge00_02Unknown` varchar(100) DEFAULT NULL,
`ChildrenAge03_05` varchar(100) DEFAULT NULL,
`ChildrenAge03_05Male` varchar(100) DEFAULT NULL,
`ChildrenAge03_05Female` varchar(100) DEFAULT NULL,
`ChildrenAge03_05Unknown` varchar(100) DEFAULT NULL,
`ChildrenAge06_10` varchar(100) DEFAULT NULL,
`ChildrenAge06_10Male` varchar(100) DEFAULT NULL,
`ChildrenAge06_10Female` varchar(100) DEFAULT NULL,
`ChildrenAge06_10Unknown` varchar(100) DEFAULT NULL,
`ChildrenAge11_15` varchar(100) DEFAULT NULL,
`ChildrenAge11_15Male` varchar(100) DEFAULT NULL,
`ChildrenAge11_15Female` varchar(100) DEFAULT NULL,
`ChildrenAge11_15Unknown` varchar(100) DEFAULT NULL,
`ChildrenAge16_17` varchar(100) DEFAULT NULL,
`ChildrenAge16_17Male` varchar(100) DEFAULT NULL,
`ChildrenAge16_17Female` varchar(100) DEFAULT NULL,
`ChildrenAge16_17Unknown` varchar(100) DEFAULT NULL,
`persongender` char(1) DEFAULT NULL,
`persondateofbirthyear` varchar(100) DEFAULT NULL,
`persondateofbirthmonth` varchar(100) DEFAULT NULL,
`persondateofbirthday` varchar(100) DEFAULT NULL,
`personexactage` varchar(100) DEFAULT NULL,
`personagecode` varchar(100) DEFAULT NULL,
`Males_18_24` varchar(100) DEFAULT NULL,
`Females_18_24` varchar(100) DEFAULT NULL,
`Unknowngender_18_24` varchar(100) DEFAULT NULL,
`Males_25_34` varchar(100) DEFAULT NULL,
`Females_25_34` varchar(100) DEFAULT NULL,
`Unknowngender_25_34` varchar(100) DEFAULT NULL,
`Males_35_44` varchar(100) DEFAULT NULL,
`Females_35_44` varchar(100) DEFAULT NULL,
`Unknowngender_35_44` varchar(100) DEFAULT NULL,
`Males_45_54` varchar(100) DEFAULT NULL,
`Females_45_54` varchar(100) DEFAULT NULL,
`Unknowngender_45_54` varchar(100) DEFAULT NULL,
`Males_55_64` varchar(100) DEFAULT NULL,
`Females_55_64` varchar(100) DEFAULT NULL,
`Unknowngender_55_64` varchar(100) DEFAULT NULL,
`Males_65_74` varchar(100) DEFAULT NULL,
`Females_65_74` varchar(100) DEFAULT NULL,
`Unknowngender_65_74` varchar(100) DEFAULT NULL,
`Males_75_Plus` varchar(100) DEFAULT NULL,
`Females_75_Plus` varchar(100) DEFAULT NULL,
`Unknowngender_75_Plus` varchar(100) DEFAULT NULL,
`personmaritalstatus` varchar(100) DEFAULT NULL,
`InferredAge` varchar(100) DEFAULT NULL,
`occupationgroup` varchar(100) DEFAULT NULL,
`personoccupation` varchar(100) DEFAULT NULL,
`ethniccode` varchar(100) DEFAULT NULL,
`languagecode` varchar(100) DEFAULT NULL,
`ethnicgroup` varchar(100) DEFAULT NULL,
`religioncode` varchar(100) DEFAULT NULL,
`hispaniccountrycode` varchar(100) DEFAULT NULL,
`personeducation` varchar(100) DEFAULT NULL,
`businessowner` varchar(100) DEFAULT NULL,
`EthnicConfidenceCode` varchar(100) DEFAULT NULL,
`InferredHouseholdRank` varchar(100) DEFAULT NULL,
`NumberOfAdults` varchar(100) DEFAULT NULL,
`GenerationsInHousehold` varchar(100) DEFAULT NULL,
`PresenceOfCreditCard` varchar(100) DEFAULT NULL,
`presenceofgoldorplatinumcreditcard` varchar(100) DEFAULT NULL,
`PresenceOfPremiumCreditCard` varchar(100) DEFAULT NULL,
`PresenceOfUpscaleRetailCard` varchar(100) DEFAULT NULL,
`PresenceOfBankCard` varchar(100) DEFAULT NULL,
`GasDeptRetailCardHolder` varchar(100) DEFAULT NULL,
`americanexpresscard` varchar(100) DEFAULT NULL,
`CreditRating` varchar(100) DEFAULT NULL,
`investment` varchar(100) DEFAULT NULL,
`investmentstocksecurities` varchar(100) DEFAULT NULL,
`Networth` varchar(100) DEFAULT NULL,
`NumberOfLinesOfCredit` varchar(100) DEFAULT NULL,
`Credit_RangeOfNewCredit` varchar(100) DEFAULT NULL,
`AmericanExpressGoldPremium` varchar(100) DEFAULT NULL,
`DiscoverGoldPremium` varchar(100) DEFAULT NULL,
`DiscoverRegular` varchar(100) DEFAULT NULL,
`GasolineOrRetailCardGoldPremium` varchar(100) DEFAULT NULL,
`GASOLINE OR RETAIL CARD REGULAR` varchar(100) DEFAULT NULL,
`MastercardGoldPremium` varchar(100) DEFAULT NULL,
`MastercardRegular` varchar(100) DEFAULT NULL,
`VisaGoldPremium` varchar(100) DEFAULT NULL,
`VisaRegular` varchar(100) DEFAULT NULL,
`CREDIT CARD INDICATOR` varchar(100) DEFAULT NULL,
`BANK CARD HOLDER` varchar(100) DEFAULT NULL,
`GAS/DEPARTMENT/RETAIL CARD HOLDER` varchar(100) DEFAULT NULL,
`TravelAndEntertainmentCardHolder` varchar(100) DEFAULT NULL,
`CreditCardholderUnknownType` varchar(100) DEFAULT NULL,
`PREMIUM CARD HOLDER` varchar(100) DEFAULT NULL,
`UPSCALE (DEPARTMENT STORE) CARD HOLDER` varchar(100) DEFAULT NULL,
`CreditCardUser` varchar(100) DEFAULT NULL,
`CreditCardNewIssue` varchar(100) DEFAULT NULL,
`BANK CARD - PRESENCE IN HOUSEHOLD` varchar(100) DEFAULT NULL,
`Investing_Active` varchar(100) DEFAULT NULL,
`InvestmentsPersonal` varchar(100) DEFAULT NULL,
`InvestmentsRealEstate` varchar(100) DEFAULT NULL,
`InvestingFinanceGrouping` varchar(100) DEFAULT NULL,
`InvestmentsForeign` varchar(100) DEFAULT NULL,
`InvestmentEstimatedResidentialPropertiesOwned` varchar(100) DEFAULT NULL,
`AssimilationCodes` varchar(100) DEFAULT NULL,
`valuehunter` varchar(100) DEFAULT NULL,
`opportunityseekers` varchar(100) DEFAULT NULL,
`newsandfinancial` varchar(100) DEFAULT NULL,
`automotivebuff` varchar(100) DEFAULT NULL,
`bookreader` varchar(100) DEFAULT NULL,
`MembershipClub` varchar(100) DEFAULT NULL,
`computerowner` varchar(100) DEFAULT NULL,
`cookingenthusiast` varchar(100) DEFAULT NULL,
`do_it_yourselfers` varchar(100) DEFAULT NULL,
`exerciseenthusiast` varchar(100) DEFAULT NULL,
`Gardener` varchar(100) DEFAULT NULL,
`golfenthusiasts` varchar(100) DEFAULT NULL,
`homedecoratingenthusiast` varchar(100) DEFAULT NULL,
`outdoorenthusiast` varchar(100) DEFAULT NULL,
`outdoorsportslover` varchar(100) DEFAULT NULL,
`photography` varchar(100) DEFAULT NULL,
`traveler` varchar(100) DEFAULT NULL,
`pets` varchar(100) DEFAULT NULL,
`cats` varchar(100) DEFAULT NULL,
`dogs` varchar(100) DEFAULT NULL,
`mailresponder` varchar(100) DEFAULT NULL,
`RespondedtoCatalog` varchar(100) DEFAULT NULL,
`sweepstakes` varchar(100) DEFAULT NULL,
`religiousmagazine` varchar(100) DEFAULT NULL,
`malemerchbuyer` varchar(100) DEFAULT NULL,
`femalemerchbuyer` varchar(100) DEFAULT NULL,
`crafts_hobbmerchbuyer` varchar(100) DEFAULT NULL,
`gardening_farmingbuyer` varchar(100) DEFAULT NULL,
`bookbuyer` varchar(100) DEFAULT NULL,
`collect_specialfoodsbuyer` varchar(100) DEFAULT NULL,
`religiouscontributor` varchar(100) DEFAULT NULL,
`politicalcontributor` varchar(100) DEFAULT NULL,
`health_institutioncontributor` varchar(100) DEFAULT NULL,
`charitable` varchar(100) DEFAULT NULL,
`generalcontributor` varchar(100) DEFAULT NULL,
`donatestoenvironmentalcauses` varchar(100) DEFAULT NULL,
`donatesbymail` varchar(100) DEFAULT NULL,
`veteraninhousehold` varchar(100) DEFAULT NULL,
`HeavyBusinessTravelers` varchar(100) DEFAULT NULL,
`hightechleader` varchar(100) DEFAULT NULL,
`Smoker` varchar(100) DEFAULT NULL,
`MailOrderBuyer` varchar(100) DEFAULT NULL,
`OnlinePurchasingIndicator` varchar(100) DEFAULT NULL,
`ApparelWomens` varchar(100) DEFAULT NULL,
`ApparelWomensPetite` varchar(100) DEFAULT NULL,
`ApparelWomensPlusSizes` varchar(100) DEFAULT NULL,
`YoungWomensApparel` varchar(100) DEFAULT NULL,
`ApparelMens` varchar(100) DEFAULT NULL,
`ApparelMensBigAndTall` varchar(100) DEFAULT NULL,
`YoungMensApparel` varchar(100) DEFAULT NULL,
`ApparelChildrens` varchar(100) DEFAULT NULL,
`HealthAndBeauty` varchar(100) DEFAULT NULL,
`BeautyCosmetics` varchar(100) DEFAULT NULL,
`Jewelry` varchar(100) DEFAULT NULL,
`Luggage` varchar(100) DEFAULT NULL,
`COMMUNITY INVOLVEMENT - CAUSES SUPPORTED FINANCIALLY` varchar(100) DEFAULT NULL,
`AnimalWelfareCharitableDonation` varchar(100) DEFAULT NULL,
`ArtsOrCulturalCharitableDonation` varchar(100) DEFAULT NULL,
`ChildrensCharitableDonation` varchar(100) DEFAULT NULL,
`ENVIRONMENT OR WILDLIFE CHARITABLE DONATION` varchar(100) DEFAULT NULL,
`EnvironmentalIssuesCharitableDonation` varchar(100) DEFAULT NULL,
`InternationalAidCharitableDonation` varchar(100) DEFAULT NULL,
`PoliticalCharitableDonation` varchar(100) DEFAULT NULL,
`PoliticalConservativeCharitableDonation` varchar(100) DEFAULT NULL,
`PoliticalLiberalCharitableDonation` varchar(100) DEFAULT NULL,
`VeteransCharitableDonation` varchar(100) DEFAULT NULL,
`CharitableDonations_Other` varchar(100) DEFAULT NULL,
`CommunityCharities` varchar(100) DEFAULT NULL,
`Parenting` varchar(100) DEFAULT NULL,
`SingleParent` varchar(100) DEFAULT NULL,
`ChildrensApparelInfantsAndToddlers` varchar(100) DEFAULT NULL,
`ChildrensLearningAndActivityToys` varchar(100) DEFAULT NULL,
`ChildrensProductsGeneralBabyCare` varchar(100) DEFAULT NULL,
`ChildrensProductsGeneralBackToSchool` varchar(100) DEFAULT NULL,
`ChildrensProductsGeneral` varchar(100) DEFAULT NULL,
`YoungAdultInHousehold` varchar(100) DEFAULT NULL,
`SeniorAdultInHousehold` varchar(100) DEFAULT NULL,
`ChildrensInterests` varchar(100) DEFAULT NULL,
`Grandchildren` varchar(100) DEFAULT NULL,
`ChristianFamilies` varchar(100) DEFAULT NULL,
`Equestrian` varchar(100) DEFAULT NULL,
`Name` varchar(100) DEFAULT NULL,
`ID` int(11) NOT NULL AUTO_INCREMENT,
`consumer_email` varchar(100) DEFAULT NULL,
PRIMARY KEY (`ID`),
KEY `ind_personlastname` (`personlastname`),
KEY `ind_personfirstname` (`personfirstname`),
KEY `ind_primaryaddress` (`primaryaddress`),
KEY `ind_state` (`state`),
KEY `ind_zipcode` (`ZipCode`),
KEY `ind_city` (`cityname`),
KEY `ind_estimatedincomecode` (`estimatedincomecode`),
KEY `ind_personmaritalstatus` (`personmaritalstatus`),
KEY `ind_persongender` (`persongender`)
) ENGINE=InnoDB AUTO_INCREMENT=43456212 DEFAULT CHARSET=latin1 <br>
Run Code Online (Sandbox Code Playgroud)
和...
CREATE TABLE `master_consumer_export_06172013_FullMatchBack_Final` (
`reg_source` varchar(100) DEFAULT NULL,
`reg_addDate` varchar(100) DEFAULT NULL,
`reg_firstName` varchar(100) DEFAULT NULL,
`reg_lastName` varchar(100) DEFAULT NULL,
`reg_add1` varchar(100) DEFAULT NULL,
`reg_city` varchar(100) DEFAULT NULL,
`reg_state` varchar(100) DEFAULT NULL,
`reg_zip` varchar(100) DEFAULT NULL,
`reg_phone` varchar(100) DEFAULT NULL,
`reg_email` varchar(100) DEFAULT NULL,
`reg_optinUrlClean` varchar(100) DEFAULT NULL,
`reg_IPClean` varchar(100) DEFAULT NULL,
`reg_dateTime` varchar(100) DEFAULT NULL,
`reg_dateStandard` varchar(100) DEFAULT NULL,
`duplicate` varchar(100) DEFAULT NULL,
`DeliveryLine1` varchar(100) DEFAULT NULL,
`DeliveryLine2` varchar(100) DEFAULT NULL,
`city` varchar(100) DEFAULT NULL,
`state` varchar(100) DEFAULT NULL,
`ZIPCode` varchar(100) DEFAULT NULL,
`FullZIPCode` varchar(100) DEFAULT NULL,
`Latitude` varchar(100) DEFAULT NULL,
`Longitude` varchar(100) DEFAULT NULL,
`Precision` varchar(100) DEFAULT NULL,
`DeliveryPointBarcode` varchar(100) DEFAULT NULL,
`CarrierRoute` varchar(100) DEFAULT NULL,
`CountyFIPS` varchar(100) DEFAULT NULL,
`CountyName` varchar(100) DEFAULT NULL,
`CongressionalDistrict` varchar(100) DEFAULT NULL,
`Deliverable` varchar(100) DEFAULT NULL,
`RecordType` varchar(100) DEFAULT NULL,
`RDI` varchar(100) DEFAULT NULL,
`CMRA` varchar(100) DEFAULT NULL,
`processingDate` varchar(100) DEFAULT NULL,
`suppressed_by_master_suppression` varchar(100) DEFAULT NULL,
`master_consumer_id` varchar(100) DEFAULT NULL,
`quickiesuppressioncode` varchar(100) DEFAULT NULL,
`EmailUploadedOnQuickie` varchar(100) DEFAULT NULL,
`MC` varchar(100) DEFAULT NULL,
`col` varchar(100) DEFAULT NULL,
`IsBadEMail` varchar(100) DEFAULT NULL,
`Domain_From_Email` varchar(100) DEFAULT NULL,
`Fgx_rdi` varchar(100) DEFAULT NULL,
`Fgx_Email` varchar(100) DEFAULT NULL,
KEY `ind_9090909` (`reg_email`),
KEY `ind_90909address` (`reg_add1`),
KEY `ind_999900_0090_I` (`DeliveryLine1`),
KEY `ind_9090909999` (`state`),
KEY `ind_9090909999Ti` (`city`),
KEY `ind_9987comb` (`DeliveryLine1`,`reg_lastName`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Run Code Online (Sandbox Code Playgroud)
现在下面是解释扩展
EXPLAIN EXTENDED
UPDATE Datasupplied_Consumer_Final a,master_consumer_export_06172013_FullMatchBack_Final b
SET a.consumer_email = b.reg_email
WHERE a.primaryaddress=b.DeliveryLine1
AND a.personlastname=b.reg_lastname
AND LEFT(a.personfirstname,1) = LEFT(b.reg_firstname,1)
AND a.cityname=b.city
AND a.state =b.state
AND IFNULL(b.DeliveryLine1,'')<>''
AND IFNULL(a.primaryaddress,'')<>''
AND IFNULL(b.reg_email,'')<>''
AND IFNULL(a.personfirstname,'')<>''
AND IFNULL(b.reg_firstname,'')<>''
AND IFNULL(a.personlastname,'')<>''
AND IFNULL(b.reg_lastname,'')<>''
AND IFNULL(a.cityname,'')<>''
AND IFNULL(b.city,'')<>''
AND IFNULL(a.state,'')<>''
AND IFNULL(b.state,'')<>''
+----+-------------+-------+------+----------------------------------------------------------------+-------------------+---------+----------------------------+----------+----------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------+----------------------------------------------------------------+-------------------+---------+----------------------------+----------+----------+-------------+
| 1 | SIMPLE | a | ALL | ind_personlastname,ind_primaryaddress,ind_state,ind_city | NULL | NULL | NULL | 37751230 | 100.00 | Using where |
| 1 | SIMPLE | b | ref | ind_999900_0090_I,ind_9090909999,ind_9090909999Ti,ind_9987comb | ind_999900_0090_I | 103 | load_file.a.primaryaddress | 1 | 100.00 | Using where |
+----+-------------+-------+------+----------------------------------------------------------------+-------------------+---------+----------------------------+----------+----------+-------------+
Run Code Online (Sandbox Code Playgroud)
显示两个表的索引
mysql> SHOW INDEXES FROM Datasupplied_Consumer_Final;
+-----------------------------+------------+-------------------------+--------------+---------------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-----------------------------+------------+-------------------------+--------------+---------------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Datasupplied_Consumer_Final | 0 | PRIMARY | 1 | ID | A | 37751230 | NULL | NULL | | BTREE | | |
| Datasupplied_Consumer_Final | 1 | ind_personlastname | 1 | personlastname | A | 1451970 | NULL | NULL | YES | BTREE | | |
| Datasupplied_Consumer_Final | 1 | ind_personfirstname | 1 | personfirstname | A | 1797677 | NULL | NULL | YES | BTREE | | |
| Datasupplied_Consumer_Final | 1 | ind_primaryaddress | 1 | primaryaddress | A | 37751230 | NULL | NULL | YES | BTREE | | |
| Datasupplied_Consumer_Final | 1 | ind_state | 1 | state | A | 42899 | NULL | NULL | YES | BTREE | | |
| Datasupplied_Consumer_Final | 1 | ind_zipcode | 1 | ZipCode | A | 129729 | NULL | NULL | YES | BTREE | | |
| Datasupplied_Consumer_Final | 1 | ind_city | 1 | cityname | A | 243556 | NULL | NULL | YES | BTREE | | |
| Datasupplied_Consumer_Final | 1 | ind_estimatedincomecode | 1 | estimatedincomecode | A | 28005 | NULL | NULL | YES | BTREE | | |
| Datasupplied_Consumer_Final | 1 | ind_personmaritalstatus | 1 | personmaritalstatus | A | 2 | NULL | NULL | YES | BTREE | | |
| Datasupplied_Consumer_Final | 1 | ind_persongender | 1 | persongender | A | 2 | NULL | NULL | YES | BTREE | | |
+-----------------------------+------------+-------------------------+--------------+---------------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
mysql> SHOW INDEXES FROM master_consumer_export_06172013_FullMatchBack_Final;
+-----------------------------------------------------+------------+-------------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+--