2015-10-28 2 views
1

У меня есть этот большой SQL:Оптимизировать Big `в` SQL

SELECT id,kdt_id,kdt_goods_id,fx_price,min_retail_price,max_retail_price, 
fx_count,stock_num,sold_num,recommend_level,is_display,is_delete, 
quit_time,review_status,fx_auth,level_discount_auth,is_fx_delete, 
sold_status 
FROM apple_goods 
WHERE 1 and `kdt_goods_id` in (
    '44089839','44089839','44089839','44089839','44089839', 
    '44089839','44089839','44089839','44089839','44089839', 
    '44089839','44089839','44089839','44089839','44089839', 
    '44089839','44089839','44089839','44089839','44089839', 
    '44089839','44089839','44089839','44089839','44089839', 
    '96611525','96611525','96611525','96611525','96611525', 
    '96611525','96611525','96611525','96611525','96611525', 
    '96611525','96611525','96611525','96611525','96611525', 
    '96611525','96611525','96611525','96611525','96611525', 
    '96611525','96611525','96611525','96611525','96611525', 
    '96611525','96611525','96611525','96611525','142061451', 
    '142061451','142061451','142061451','142061451','142061451', 
    '142061451','142061451','142061451','142061451','142061451', 
    '142061451','142061451','142061451','142061451','142061451', 
    '142061451','142061451','142061451','142801551','142801551', 
    '142801551','142801551','142801551','142801551','142801551', 
    '142801551','142801551','142801551','142801551','142801551', 
    '142801551','142801551','142801551','142801551','142801551', 
    '142801551','142801551','142801551','142801551','142801551', 
    '143381529','143381529','143381529','143381529','143381529', 
    '143381529','147713054','147713054','147713054','147713054', 
    '147713054','147713054','147713054','148164398','148164398', 
    '148164398','148164398','148164398','148164398','148164398', 
    '148164398','148164398','148164398','148164398','148296160', 
    '148296160','148296160','148296160','148296160','148296160', 
    '151063722','151063722','151063722','151063722','151063722', 
    '151063722','151063722','151063722','151063722','151063722', 
    '151063722','151063722','151063722','151063722','151063722', 
    '151063722','151063722','151063722','151063722','151063722', 
    '151063722','153933372','153933372','153933372','153933372', 
    '153933372','153933372','154447237','154447237','154447237', 
    '154447237','154447237','154447237','154447237','158137781', 
    '158137781','158137781','158137781','158137781','158137781', 
    '158217358','158217358','158217358','158217358','158217358', 
    '158217358','158217358','158217358','158217358','158217358', 
    '158217358','158217358','158217358','158246547','158246547', 
    '158246547','158246547','158246547','158246547','158246547', 
    '158246547','158246547','158246547','158246547','158246547', 
    '158246547','158246547','158246547','158246547','158246547', 
    '158246547','158246547','158246547','158246547','160734561', 
    '160734561','160734561','160734561','160734561','160734561', 
    '162435844','162435844','162435844','162435844','162435844', 
    '162435844','162435844','162435844','162435844','162435844', 
    '162435844','162435844','162435844','163784258','163784258', 
    '163784258','163784258','163784258','163784258','163784258', 
    '163784258','163784258','163784258','163784258','163784258', 
    '163784258','163784258','163784258','163784258','163784258', 
    '163784258','163784258','163800813','163800813','163800813', 
    '163800813','163800813','163800813','163800813','163800813', 
    '163800813','163800813','163800813','163803246','163803246', 
    '163803246','163803246','163803246','163803246','164617535', 
    '164617535','164617535','164617535','164617535','164617535', 
    '164617535','164617535','164617535','164617535','164617535', 
    '164617535','164617535','164617535','164617535','164617535', 
    '164617535','164617535','164617535','164617535','164617535') 

Как оптимизировать его?

explain:

``` 
*************************** 1. row *************************** 
      id: 1 
    select_type: SIMPLE 
     table: apple_goods 
     type: range 
possible_keys: kdt_goods_id 
      key: kdt_goods_id 
     key_len: 4 
      ref: NULL 
     rows: 20 
     Extra: Using index condition 
1 row in set (0.00 sec) 

``` 
+3

Ну, вы можете вставить все эти значения во временную таблицу и внутреннее соединение к ней в своем запросе. Также обратите внимание: в этом списке есть много повторяющихся значений, которые не нужны для фильтрации логики. –

+0

@ У ЭндиКорнеева это улучшилось, чем оригинал? – Chinaxing

+1

Удаление дубликатов из списка, безусловно, увеличит производительность, если мы говорим об этом. В любом случае, это будет немного читаемо (с моей точки зрения). –

ответ

1

Я удалил дубликаты с вашего IN, сравните это с созданием временной таблицы.

SELECT id,kdt_id,kdt_goods_id,fx_price,min_retail_price,max_retail_price, 
fx_count,stock_num,sold_num,recommend_level,is_display,is_delete, 
quit_time,review_status,fx_auth,level_discount_auth,is_fx_delete, 
sold_status 
FROM apple_goods 
WHERE 1 and `kdt_goods_id` in 
('96611525', 
'44089839', 
'164617535', 
'163803246', 
'163800813', 
'163784258', 
'162435844', 
'160734561', 
'158246547', 
'158217358', 
'158137781', 
'154447237', 
'153933372', 
'151063722', 
'148296160', 
'148164398', 
'147713054', 
'143381529', 
'142801551', 
'142061451') 
0

Прежде всего, вы должны использовать таблицу для хранения значений, которые есть в вашем IN списке, а затем присоединиться к этим. Если это временные данные, вы можете использовать временную таблицу.

CREATE TEMPORARY TABLE t1 (yourid VARCHAR(9) PRIMARY KEY); 
INSERT IGNORE INTO t1 VALUES 
    ('44089839'),('44089839'),('44089839'),('44089839'), 
    ('44089839'),('44089839'),('44089839'),('44089839'), 
    ('44089839'),('44089839'),('44089839'),('44089839'), 
    ('44089839'),('44089839'),('44089839'),('44089839'), 
    ('44089839'),('44089839'),('44089839'),('44089839'), 
    ('44089839'),('44089839'),('44089839'),('44089839'), 
    ('44089839'),('96611525'),('96611525'),('96611525'), 
    ('96611525'),('96611525'),('96611525'),('96611525'), 
    ('96611525'),('96611525'),('96611525'),('96611525'), 
    ('96611525'),('96611525'),('96611525'),('96611525'), 
    ('96611525'),('96611525'),('96611525'),('96611525'), 
    ('96611525'),('96611525'),('96611525'),('96611525'), 
    ('96611525'),('96611525'),('96611525'),('96611525'), 
    ('96611525'),('96611525'),('142061451'),('142061451'), 
    ('142061451'),('142061451'),('142061451'),('142061451'), 
    ('142061451'),('142061451'),('142061451'),('142061451'), 
    ('142061451'),('142061451'),('142061451'),('142061451'), 
    ('142061451'),('142061451'),('142061451'),('142061451'), 
    ('142061451'),('142801551'),('142801551'),('142801551'), 
    ('142801551'),('142801551'),('142801551'),('142801551'), 
    ('142801551'),('142801551'),('142801551'),('142801551'), 
    ('142801551'),('142801551'),('142801551'),('142801551'), 
    ('142801551'),('142801551'),('142801551'),('142801551'), 
    ('142801551'),('142801551'),('142801551'),('143381529'), 
    ('143381529'),('143381529'),('143381529'),('143381529'), 
    ('143381529'),('147713054'),('147713054'),('147713054'), 
    ('147713054'),('147713054'),('147713054'),('147713054'), 
    ('148164398'),('148164398'),('148164398'),('148164398'), 
    ('148164398'),('148164398'),('148164398'),('148164398'), 
    ('148164398'),('148164398'),('148164398'),('148296160'), 
    ('148296160'),('148296160'),('148296160'),('148296160'), 
    ('148296160'),('151063722'),('151063722'),('151063722'), 
    ('151063722'),('151063722'),('151063722'),('151063722'), 
    ('151063722'),('151063722'),('151063722'),('151063722'), 
    ('151063722'),('151063722'),('151063722'),('151063722'), 
    ('151063722'),('151063722'),('151063722'),('151063722'), 
    ('151063722'),('151063722'),('153933372'),('153933372'), 
    ('153933372'),('153933372'),('153933372'),('153933372'), 
    ('154447237'),('154447237'),('154447237'),('154447237'), 
    ('154447237'),('154447237'),('154447237'),('158137781'), 
    ('158137781'),('158137781'),('158137781'),('158137781'), 
    ('158137781'),('158217358'),('158217358'),('158217358'), 
    ('158217358'),('158217358'),('158217358'),('158217358'), 
    ('158217358'),('158217358'),('158217358'),('158217358'), 
    ('158217358'),('158217358'),('158246547'),('158246547'), 
    ('158246547'),('158246547'),('158246547'),('158246547'), 
    ('158246547'),('158246547'),('158246547'),('158246547'), 
    ('158246547'),('158246547'),('158246547'),('158246547'), 
    ('158246547'),('158246547'),('158246547'),('158246547'), 
    ('158246547'),('158246547'),('158246547'),('160734561'), 
    ('160734561'),('160734561'),('160734561'),('160734561'), 
    ('160734561'),('162435844'),('162435844'),('162435844'), 
    ('162435844'),('162435844'),('162435844'),('162435844'), 
    ('162435844'),('162435844'),('162435844'),('162435844'), 
    ('162435844'),('162435844'),('163784258'),('163784258'), 
    ('163784258'),('163784258'),('163784258'),('163784258'), 
    ('163784258'),('163784258'),('163784258'),('163784258'), 
    ('163784258'),('163784258'),('163784258'),('163784258'), 
    ('163784258'),('163784258'),('163784258'),('163784258'), 
    ('163784258'),('163800813'),('163800813'),('163800813'), 
    ('163800813'),('163800813'),('163800813'),('163800813'), 
    ('163800813'),('163800813'),('163800813'),('163800813'), 
    ('163803246'),('163803246'),('163803246'),('163803246'), 
    ('163803246'),('163803246'),('164617535'),('164617535'), 
    ('164617535'),('164617535'),('164617535'),('164617535'), 
    ('164617535'),('164617535'),('164617535'),('164617535'), 
    ('164617535'),('164617535'),('164617535'),('164617535'), 
    ('164617535'),('164617535'),('164617535'),('164617535'), 
    ('164617535'),('164617535'),('164617535'); 

Вышеуказанный оператор создает временную таблицу, вставляет в нее данные, а также удаляет все дубликаты.

После того, как это будет сделано, то вы просто использовать таблицу в запросе:

SELECT id,kdt_id,kdt_goods_id,fx_price,min_retail_price,max_retail_price,fx_count,stock_num,sold_num,recommend_level,is_display,is_delete,quit_time, 
review_status,fx_auth,level_discount_auth,is_fx_delete,sold_status 
FROM apple_goods 
JOIN t1 ON (yourid=kdt_goods_id); 

Я бы также предположить, что вы подходите типы в вашей временной таблицы и столбцов JOIN против, например, если kdt_goods_id - INT, то yourid в вашей временной таблице должно быть INT.

+0

ли это улучшает производительность? если я уменьшу значение «IN», заданное приложением, перейдите к mysql, лучше? – Chinaxing

+0

Это может улучшить, но это не так ясно. Это единственный набор данных, который вы передаете 'IN' или есть другие? Это когда-нибудь меняется? Является ли запрос построенным динамически? – vhu

+0

динамически строить. – Chinaxing

Смежные вопросы