MySQL为列类型文本添加索引在使用选择查询时不会提高性能

时间:2019-03-14 19:35:33

标签: mysql indexing

我正在使用InnoDB。从这个question中,我发现如果要向类型为TEXT的列添加索引,则必须指定长度。

但是在成功添加索引之后,select查询的性能保持不变。有人知道为什么吗?我确实使用tableName的show index检查了索引,并且该索引确实存在。

这是最后两个表EventResultsFinalSummary和EventResultsPrelims。

CREATE OR REPLACE VIEW ScheduleView AS
SELECT s.ScheduleID, e.EventRound, e.EventRoundsID, e.EventID, e.NumberCouplesInRound, n.NumberOnBack, eic.EventName AS 'Division',
       CONCAT(a1.FirstName, ' ', a1.LastName, ' - ', a2.FirstName, ' ', a2.LastName) AS 'Couple',
       s.SessionID AS 'Session', erfs.CouplePlace, c.CoupleID,
       s.Timeslot, s.SubFloor ,s.itemDuration,s.HeatNumber, o.ActivityName, st.StudioName AS 'DanceStudio', a.AgeName AS 'Age', s.competition_id, erp.CoupleVotes
FROM Schedule AS s
    LEFT JOIN EventRounds AS e ON s.EventRoundID = e.EventRoundsID AND s.competition_id = e.competition_id
    LEFT JOIN OtherActivities AS o ON s.OtherActivitiesID = o.OtherActivitiesID AND s.competition_id = o.competition_id
    LEFT JOIN EntriesEvents AS ee ON e.EventID = ee.EventID AND e.EventRound <= ee.EventRound AND e.Competition_id = ee.Competition_id
    LEFT JOIN Couples AS c ON ee.EntryID = c.CoupleID AND ee.Competition_id = c.Competition_id
    LEFT JOIN NumSysComps AS n ON c.CompetitorIDMan = n.CompetitorIDMan AND c.Competition_id = n.Competition_id
    LEFT JOIN Attendees AS a1 ON c.CompetitorIDMan = a1.AttendeeID AND c.Competition_id = a1.Competition_id
    LEFT JOIN Attendees AS a2 ON c.CompetitorIDLady = a2.AttendeeID AND c.Competition_id = a2.Competition_id
    LEFT JOIN Studios AS st ON a1.StudioID = st.StudioID AND a1.Competition_id = st.Competition_id
    LEFT JOIN EventsInComp AS eic ON eic.EventID = e.EventID AND eic.Competition_id = e.Competition_id
    LEFT JOIN ProAmSingleDanceEvents AS psd ON eic.ProAmSingleDanceEventID = psd.ProAmSingleDanceEventID AND eic.Competition_id = psd.Competition_id
    LEFT JOIN ProAmMultiDanceEvents AS pmd ON eic.ProAmMultiDanceEventID = pmd.ProAmMultiDanceEventID AND eic.Competition_id = pmd.Competition_id
    LEFT JOIN Ages AS a ON (
        psd.AgeID = a.AgeID AND psd.Competition_id = a.Competition_id
        OR
        pmd.AgeID = a.AgeID AND pmd.Competition_id = a.Competition_id
    )
    LEFT JOIN EventResultsFinalSummary AS erfs ON e.EventID = erfs.EventID AND c.CoupleID = erfs.CoupleID AND s.Competition_id = erfs.Competition_id
    LEFT JOIN EventResultsPrelims AS erp ON e.EventID = erp.EventID AND erp.EventRound = e.EventRound AND c.CoupleID = erp.CoupleID AND s.Competition_id = erp.Competition_id
    ORDER BY s.ScheduleID;

我向我加入的列添加了索引。 通过使用以下查询,EventID,CoupleId,EventResultsFinalSummary的Competition_id和EventID,EventRound,EventResultsPrelims的Competition_id可以通过以下查询来获取。

我的问题是,当这些列的类型为varchar或int时,select *查询将仅用1s。但是当类型为Text时,需要26秒。

ALTER TABLE `EventResultsPrelims` ADD INDEX(`EventID`(6));

0 个答案:

没有答案