Mysql добавление индекса для текста типа столбца не улучшает производительность при использовании запроса выбора - PullRequest
0 голосов
/ 14 марта 2019

Я использую InnoDB. Из этого вопроса я узнал, что мне нужно указать длину, если я хочу добавить индекс к столбцам, тип которых TEXT.

Но после успешного добавления индекса производительность запроса на выбор остается неизменной. Кто-нибудь знает почему? Я проверил индекс с показом индекса от tableName, и индекс действительно существовал.

Так что это были две последние таблицы 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, Competition_id для EventResultsFinalSummary и EventID, EventRound, Competition_id для EventResultsPrelims с помощью запроса, подобного следующему.

Мой вопрос заключается в том, что когда эти столбцы имеют тип, например varchar или int, запрос select * будет принимать только 1 с. Но это займет 26 секунд, когда тип текста.

ALTER TABLE `EventResultsPrelims` ADD INDEX(`EventID`(6));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...