Comments 24
Вы слышали о using/force index? После вас читать такие запросы и ломать голову, откуда и зачем здесь object+0=0 — занятие для стойких духом.
А вы внимательно прочли топик?
«Используемые «хитрости» работают также на PostgreSQL, Oracle, SQLite, DB2 и не являются MySQL направленными»
«Используемые «хитрости» работают также на PostgreSQL, Oracle, SQLite, DB2 и не являются MySQL направленными»
Поддерживаю Demetros-а, надо учить матчасть а не огороды городить.
dev.mysql.com/doc/refman/5.0/en/index-hints.html
P.S.: А вы внимательно прочли топик?
«Mysql performance»
dev.mysql.com/doc/refman/5.0/en/index-hints.html
P.S.: А вы внимательно прочли топик?
«Mysql performance»
Извините конечно, но я считаю ваши комментарии неуместными.
1. Я отчётливо дал понять в начале топика, что используемые фичи универсальны.
2. Не вижу ни чего плохого в использовании универсального подхода, а не MySQL направленного.
1. Я отчётливо дал понять в начале топика, что используемые фичи универсальны.
2. Не вижу ни чего плохого в использовании универсального подхода, а не MySQL направленного.
А я их считаю очень даже уместными. Вы указали в заголовке статьи «MySQL performance», в тегах указали «mysql performance tricks». Так что я в праве считать что статья о MySQL, по этому я считаю что в данном случае уместно использовать дериктивы MySQL для решения данных задач, нежели использовать костыли.
Рискну предположить что конструкция «object+0=0» добавит одну избыточную операцию сложения для каждой строки на стадии «фильтрации» результатов. Таким образом мы получим для таблицы со 100к записей, 100к избыточных операций сложения. И для чего нам 100к избыточных операций если мы можем явно указать какой индекс использовать?
dev.mysql.com/doc/refman/5.5/en/where-optimizations.html
Нет, не должно оно выполнять такую математику с каждой строкой
Нет, не должно оно выполнять такую математику с каждой строкой
Есть более сложные случаи, вот клиент вопрошал почему у него тормозит сайт на наших VPS. Затем начали разбирать сайт, оказалось 93 запроса, примерно вот таких:
Объяснение, что это можно объединить в один запрос ему не подходит, т.к. цмс написанная им «так не сработает»…
Более того, дальше есть выборка всей БД для подсчета товаров…
SELECT count(*) FROM ru_tovar AS tovar WHERE spec='yes' AND tovar_id='0' AND nalichie>0
SELECT tovar.* FROM ru_tovar AS tovar WHERE 1=1 AND nalichie>0 AND spec='yes' AND tovar_id='0' AND nalichie>0 ORDER BY RAND() LIMIT 9
SELECT count(*) FROM ru_tovar AS tovar WHERE new='yes' AND tovar_id='0' AND nalichie>0
SELECT tovar.* FROM ru_tovar AS tovar WHERE 1=1 AND nalichie>0 AND new='yes' AND tovar_id='0' AND nalichie>0 ORDER BY RAND() LIMIT 3
SELECT count(*) FROM ru_tovar AS tovar WHERE hit='yes' AND tovar_id='0' AND nalichie>0
SELECT tovar.* FROM ru_tovar AS tovar WHERE 1=1 AND nalichie>0 AND hit='yes' AND tovar_id='0' AND nalichie>0 ORDER BY RAND() LIMIT 3
SELECT menu_id, proizvod_id, path_id FROM ru_tovar
Объяснение, что это можно объединить в один запрос ему не подходит, т.к. цмс написанная им «так не сработает»…
Более того, дальше есть выборка всей БД для подсчета товаров…
Немного оффтоп.
Есть такие затейники.
Недавно попался очередной перл подобных ЦМСостроителей.
Простой отчетик по заказам на сайте, вначале месяца формируется еще терпимо, к концу месяца начинает тупить минут по 10 (если не обламывается по лимиту памяти). На выдаче у него от силы 3К строчек, типа №/Датавремя/Покупатель/Точка продажи/Сумма.
Полез доставать скелеты из шкафа.
Две основных таблицы TABLE_ORDERS и TABLE_ORDERS_PRODUCTS. Из индексов — только праймари. Причем ни одного поля из TABLE_ORDERS_PRODUCTS, в этом запросе не используется. Смотришь план — а там перебор 100К х 30К записей через filesort и temptable.
Собственно запрос, для ценителей.
Ну и само собой, запрос прогоняется два раза, посчитать строчки и получить данные.
А потом в цикле пробежка по результатам, на каждую строчку выдачи рожается объект «заказ», в который вычитываются данные (снова!) из базы, и пересчитывается сумма (сумма то заказа нигде не хранится). Складывается все в массив, который потом сортируется и выдается.
Есть такие затейники.
Недавно попался очередной перл подобных ЦМСостроителей.
Простой отчетик по заказам на сайте, вначале месяца формируется еще терпимо, к концу месяца начинает тупить минут по 10 (если не обламывается по лимиту памяти). На выдаче у него от силы 3К строчек, типа №/Датавремя/Покупатель/Точка продажи/Сумма.
Полез доставать скелеты из шкафа.
Две основных таблицы TABLE_ORDERS и TABLE_ORDERS_PRODUCTS. Из индексов — только праймари. Причем ни одного поля из TABLE_ORDERS_PRODUCTS, в этом запросе не используется. Смотришь план — а там перебор 100К х 30К записей через filesort и temptable.
Собственно запрос, для ценителей.
$products_query_raw = "select distinct o.orders_id, o.point,o.orders_status, o.customers_name, o.customers_city, o.customers_street_address ,
o.customers_telephone, o.customers_id, o.payment_method, o.date_purchased, o.last_modified, o.currency, o.currency_value, s.orders_status_name
from " . TABLE_ORDERS_STATUS . " s, " . TABLE_ORDERS . " o
inner join " . TABLE_ORDERS_PRODUCTS . " op on (o.orders_id = op.orders_id)
where o.orders_status = s.orders_status_id
and o.point<> '".$pzstore."'
and UNIX_TIMESTAMP(o.date_purchased) > $startDate
and UNIX_TIMESTAMP(o.date_purchased) <= $endDate
and Hour(o.date_purchased)*60+Minute(o.date_purchased) > '".intval(date("H",$startDate)*60+date("i",$startDate))."'
and Hour(o.date_purchased)*60+Minute(o.date_purchased) <= '".intval(date("H",$endDate)*60+date("i",$endDate))."'
group by o.orders_id
order by o.date_purchased DESC";
Ну и само собой, запрос прогоняется два раза, посчитать строчки и получить данные.
А потом в цикле пробежка по результатам, на каждую строчку выдачи рожается объект «заказ», в который вычитываются данные (снова!) из базы, и пересчитывается сумма (сумма то заказа нигде не хранится). Складывается все в массив, который потом сортируется и выдается.
Однако тэг code в предпросмотре и в публикации ведет себя по разному.
Ну вот откуда подгреблись эти лишние переводы строк?
Ну вот откуда подгреблись эти лишние переводы строк?
О Боже! Да это же OSCommerce…
Страна должна знать своих героев)
Весь код этой цмс можно выложить куда-нибудь в качестве пособия «никогда так не делай».
Страна должна знать своих героев)
Весь код этой цмс можно выложить куда-нибудь в качестве пособия «никогда так не делай».
Мальчик не из Украины и не Шевчук ли фамилия??? Я такое тоже видела в коде %(
Уберите пожалуйста в коде лишние переводы строк. Читать очень сложно, особенно планы.
Sign up to leave a comment.
Mysql performance