Проблемы с производительностью mysql в SELECT - PullRequest
0 голосов
/ 05 сентября 2011

У меня есть эти таблицы:

IdToName: 

Id   Name 
1    A 
2    B 

RawData:

Son  Father 
B    A

Я хочу создать новую таблицу с именем Data, в которой вместо строки у меня будут Id, то есть:

Data: 
Son    Father 
2      1 

Я делаю это, используя этот запрос:

INSERT INTO `Data`
    SELECT L.`ID`, P.`ID`
    FROM   `IdToName` L,
           `IdToName` P,
           `RawData` T
    WHERE T.Father = P.Name
    AND   T.Son = L.Name

У меня есть ключи от сына и отца RawData и от имени IdToName.Этот запрос занимает около 7 минут для 2800000 строк.У кого-нибудь есть идеи, как мне улучшить производительность для этого?

Ответы [ 2 ]

0 голосов
/ 05 сентября 2011

Проверьте только время запроса.Я сильно подозреваю, что у вас действительно "проблемы с производительностью MySQL в INSERT", а не "в SELECT".7000 вставок в секунду - это довольно много, это может быть физический предел вашей машины.

мм, и кстати [править]: мы не знаем точную форму и содержание ваших таблиц (и памяти)), но я не думаю, что в вашем случае какой-либо индекс может помочь.

0 голосов
/ 05 сентября 2011

Единственная очевидная причина, по которой это будет медленно, - отсутствие индексов пропппера.

Пожалуйста, индексируйте Id в таблице IdToName как UNIQUE, а оба столбца в таблице RawData - по INDEX.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...