Home
Паранойя, отпущенная на свободу
Записки штурмраухермастера
продолжаем боротьбу 
2nd-May-2008 02:58 pm
fight, photo, zeida, great wave, training, optimistic, relax, crazy_car, car2, pharaon, car, default, IT, dead horse, vorcon, vorcon2007, photo history, evening electric
Все-таки, mysql - это SQL-интерфейс к grep.

Я вытащил из лога mysql все SELECT'ы. Кто скажет, что это просто - пусть поищет в документации описание формата лога.

Теперь (блин!!!) нужно привести все селекты к плейсхолдерному виду -

из

SELECT * FROM ModelTypes WHERE ID=1413
SELECT * FROM Models WHERE ID=206
SELECT * FROM Marks WHERE ID=47

сделать

SELECT * FROM ModelTypes WHERE ID=? : 1413
SELECT * FROM Models WHERE ID=? : 206
SELECT * FROM Marks WHERE ID=? : 47

все осложняется наличием конструкций типа

SELECT SQL_CACHE Main.ZoneId, Main.UnitId, Main.BannerId, Main.Weight, Main.EvenDistribution
, Main.WeekDays, Main.DayTimeBegin, Main.DayTimeEnd, Main.IsExclusive, Main.KeyWords
AS RefererWords, Main.InputMode AS RefererMode, Main.UnitKeyWords AS UnitWords, Main.Width, Main.
Height, Shows.ShowsUsed, Shows.ShowsBought, Clicks.ClicksUsed, Clicks.ClicksBought FROM FastBannerLookup AS Main LEFT JOIN AdUnitShows AS Shows ON (Main.UnitId = Shows.UnitId) AND (Shows.Canceled = 0) LEFT JOIN AdUnitClicks AS Clicks ON (Main.UnitId = Clicks.UnitId) AND (Clicks.Canceled = 0) WHERE
((BrowserFlags & 256) <> 0) AND ((WeekDays & 16) <> 0) AND (Main.DayTimeBegin <= 36000) AND (36000 < Mai
n.DayTimeEnd) AND (Main.BeginDate <= 1209708000) AND (1209708000 < Main.EndDate) AND ( (Main
.Pattern IS NULL) OR (LENGTH(Main.Pattern) = 0) OR ('' REGEXP Main.Pattern) ) AND
((Shows.ShowsBought IS NULL) OR ((Shows.ShowsBought >= 0) AND (Shows.ShowsBought > Shows.ShowsUsed))) AND
((Clicks.ClicksBought IS NULL) OR ((Clicks.ClicksBought >= 0) AND (Clicks.ClicksBought > Clicks.ClicksUsed)))
AND (((Main.ReferrersAmount > 0) AND (Main.InputMode IS NOT NULL)) OR (Main.ReferrersAmount = 0)) ORDER BY Main.IsExclusive DESC, Main.Weight DESC

которых тоже нужно преобразовывать. Блин. Вашумать. Ничего, если я ЭТО сделаю, я с заказчика потребую бабла. Штуку баксов, не менее.
Comments 
2nd-May-2008 12:31 pm (UTC)
я думаю стоит попросить и 5 особенно за последний. и желательно удавить автора ибо это не запрос!
2nd-May-2008 12:39 pm (UTC)
Ты знаешь, автора давить поздно. Нужно рефакторить эту бню.
2nd-May-2008 02:15 pm (UTC)
Не понял, что сложного в вынимании селектов из лога, он абсолютно простейший.
Ну а уж проблемы самих SQL-запросов остаются на совести разработчика. Я лично просто боюсь представить, сколько такая простынка исполняется.
Кстати, EXPLAIN не поможет?
2nd-May-2008 02:33 pm (UTC)
Не вполне. Там, как минимум, не описан формат вообще.

Разработчик, считай, умер. Моя задача теперь - соптимизировать его наследство.

Explain не поможет. Мне нужно выяснить, КАКОЙ ОБЪЕМ данных вынимает каждый запрос.

SELECT * FROM Models WHERE ID=206
и
SELECT * FROM Models WHERE ID=207

как ты понимаешь, ОДИНАКОВЫЕ запросы
2nd-May-2008 05:40 pm (UTC)
Как-то у тебя всё непросто.
This page was loaded May 16th 2008, 1:48 pm GMT.