Size: a a a

2020 November 23

СП

Сергей Предводителев... in MySQL
Добрый день!

MySql 8. Таблица InnoDB. При экспорте занимает 31Mb, а в самом Mysql аж 25GB... Как это исправить, подскажите?
источник

R

Raven in MySQL
optimize table
источник

СП

Сергей Предводителев... in MySQL
Помогло, физически стало мало занимать место, но в информации в phpmyadmin всё равно старые данные...
источник

VS

Vitaliy Sheverov in MySQL
Ребята, есть ли возможность улучшить этот запрос?

select id, IF(currency_code = 'UAH', (vendor_price / 1), IF(currency_code = 'USD', (vendor_price / 0.037), vendor_price)) as vendor_price, (select IF(currency_code = 'UAH', (price / 1), IF(currency_code = 'USD', (price / 0.037), price)) as price from product_specials where (`user_group_id` = ? and date_start < ?) and (`date_end` > ? or date_end is null) and IF(products.type = 2, product_id IN (SELECT id FROM products WHERE main_id = products.id),  product_id = products.id)) as special, (select IF(currency_code = 'UAH', (price / 1), IF(currency_code = 'USD', (price / 0.037), price)) as price from product_discounts where (`user_group_id` = ? and date_start < ? and quantity = ?) and (`date_end` > ? or date_end is null) and IF(products.type = 2, product_id IN (SELECT id FROM products WHERE main_id = products.id),  product_id = products.id)) as discount from products where (`status` = ? and date_available <= ?) and type <> ? and products.id in (select product_id from product_to_categories where category_id = ?)

кажется IF(products.type = 2, product_id IN (SELECT id FROM products WHERE main_id = products.id),  product_id = products.id) очень проблемное место
источник

IZ

Ilia Zviagin in MySQL
Vitaliy Sheverov
Ребята, есть ли возможность улучшить этот запрос?

select id, IF(currency_code = 'UAH', (vendor_price / 1), IF(currency_code = 'USD', (vendor_price / 0.037), vendor_price)) as vendor_price, (select IF(currency_code = 'UAH', (price / 1), IF(currency_code = 'USD', (price / 0.037), price)) as price from product_specials where (`user_group_id` = ? and date_start < ?) and (`date_end` > ? or date_end is null) and IF(products.type = 2, product_id IN (SELECT id FROM products WHERE main_id = products.id),  product_id = products.id)) as special, (select IF(currency_code = 'UAH', (price / 1), IF(currency_code = 'USD', (price / 0.037), price)) as price from product_discounts where (`user_group_id` = ? and date_start < ? and quantity = ?) and (`date_end` > ? or date_end is null) and IF(products.type = 2, product_id IN (SELECT id FROM products WHERE main_id = products.id),  product_id = products.id)) as discount from products where (`status` = ? and date_available <= ?) and type <> ? and products.id in (select product_id from product_to_categories where category_id = ?)

кажется IF(products.type = 2, product_id IN (SELECT id FROM products WHERE main_id = products.id),  product_id = products.id) очень проблемное место
ЧТо-то ошибки вроде там у тебя
источник

VS

Vitaliy Sheverov in MySQL
Ilia Zviagin
ЧТо-то ошибки вроде там у тебя
код выполнятся, где именно могут быть ошибки?
источник

IZ

Ilia Zviagin in MySQL
Vitaliy Sheverov
Ребята, есть ли возможность улучшить этот запрос?

select id, IF(currency_code = 'UAH', (vendor_price / 1), IF(currency_code = 'USD', (vendor_price / 0.037), vendor_price)) as vendor_price, (select IF(currency_code = 'UAH', (price / 1), IF(currency_code = 'USD', (price / 0.037), price)) as price from product_specials where (`user_group_id` = ? and date_start < ?) and (`date_end` > ? or date_end is null) and IF(products.type = 2, product_id IN (SELECT id FROM products WHERE main_id = products.id),  product_id = products.id)) as special, (select IF(currency_code = 'UAH', (price / 1), IF(currency_code = 'USD', (price / 0.037), price)) as price from product_discounts where (`user_group_id` = ? and date_start < ? and quantity = ?) and (`date_end` > ? or date_end is null) and IF(products.type = 2, product_id IN (SELECT id FROM products WHERE main_id = products.id),  product_id = products.id)) as discount from products where (`status` = ? and date_available <= ?) and type <> ? and products.id in (select product_id from product_to_categories where category_id = ?)

кажется IF(products.type = 2, product_id IN (SELECT id FROM products WHERE main_id = products.id),  product_id = products.id) очень проблемное место
Отформатируй запрос нормально, увидишь.
источник

IZ

Ilia Zviagin in MySQL
Vitaliy Sheverov
код выполнятся, где именно могут быть ошибки?
Я точно не могу утверждать пока
источник

VS

Vitaliy Sheverov in MySQL
Ilia Zviagin
Я точно не могу утверждать пока
вот отформатировал
источник

OM

Oleg Makarikhin in MySQL
хм. что это за волшебство 0.037
источник

OM

Oleg Makarikhin in MySQL
если есть currency_code  то должен быть справочник-валют, с фиксированными или историческими курсами. пусть джоинятся
источник

IZ

Ilia Zviagin in MySQL
Vitaliy Sheverov
Ребята, есть ли возможность улучшить этот запрос?

select id, IF(currency_code = 'UAH', (vendor_price / 1), IF(currency_code = 'USD', (vendor_price / 0.037), vendor_price)) as vendor_price, (select IF(currency_code = 'UAH', (price / 1), IF(currency_code = 'USD', (price / 0.037), price)) as price from product_specials where (`user_group_id` = ? and date_start < ?) and (`date_end` > ? or date_end is null) and IF(products.type = 2, product_id IN (SELECT id FROM products WHERE main_id = products.id),  product_id = products.id)) as special, (select IF(currency_code = 'UAH', (price / 1), IF(currency_code = 'USD', (price / 0.037), price)) as price from product_discounts where (`user_group_id` = ? and date_start < ? and quantity = ?) and (`date_end` > ? or date_end is null) and IF(products.type = 2, product_id IN (SELECT id FROM products WHERE main_id = products.id),  product_id = products.id)) as discount from products where (`status` = ? and date_available <= ?) and type <> ? and products.id in (select product_id from product_to_categories where category_id = ?)

кажется IF(products.type = 2, product_id IN (SELECT id FROM products WHERE main_id = products.id),  product_id = products.id) очень проблемное место
Подзапросы надо бы уплощать, а можно ли это делать — не ясно пока.
источник

IZ

Ilia Zviagin in MySQL
Oleg Makarikhin
если есть currency_code  то должен быть справочник-валют, с фиксированными или историческими курсами. пусть джоинятся
+
источник

VS

Vitaliy Sheverov in MySQL
Oleg Makarikhin
хм. что это за волшебство 0.037
это курс, есть таблица с курсами
источник

VS

Vitaliy Sheverov in MySQL
но значение для умножения было витянуто изначально, так как запрос легкий
источник

IZ

Ilia Zviagin in MySQL
Vitaliy Sheverov
вот отформатировал
Ну и ты сам бы подумал...
Что это ?
IF(currency_code = 'UAH', (vendor_price / 1), IF(currency_code = 'USD', (vendor_price / 0.037), vendor_price)) as vendor_price,

Уж так явно лучше
vendor_price / IF(currency_code = 'UAH',  1, IF(currency_code = 'USD', 0.037)) as vendor_price,

Ещё лучше

vendor_price / case currency_code when 'UAH' then  1 when 'USD' then 0.037 else null end as vendor_price,
источник

IZ

Ilia Zviagin in MySQL
Vitaliy Sheverov
это курс, есть таблица с курсами
Кстати, с веткой ELSE по валютам у тебя там что? Что-то нехорошее.
источник

VS

Vitaliy Sheverov in MySQL
одна из всегда есть
источник

VS

Vitaliy Sheverov in MySQL
ок, по валютам понял, но так быстее, через case?
источник

IZ

Ilia Zviagin in MySQL
Vitaliy Sheverov
одна из всегда есть
Ну так надо туда было NULL писать
источник