За последние 24 часа нас посетили 22008 программистов и 1100 роботов. Сейчас ищут 714 программистов ...

Как правильно связать таблицы?

Тема в разделе "MySQL", создана пользователем Dmitriy A. Arteshuk, 14 окт 2014.

  1. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    Код (Text):
    1.  
    2. SELECT items.* FROM i2cat_1 AS i2c LEFT JOIN items_1 AS items ON items.id_item=i2c.item_id WHERE i2c.cat_id=100 UNION
    3. SELECT items.* FROM i2cat_2 AS i2c LEFT JOIN items_2 AS items ON items.id_item=i2c.item_id WHERE i2c.cat_id=101 UNION
    4. SELECT items.* FROM i2cat_3 AS i2c LEFT JOIN items_3 AS items ON items.id_item=i2c.item_id WHERE i2c.cat_id=102
    Что это вообще такое? почему тут на каждый айдишник категории своя таблица?
     
  2. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    у каждой таблицы items своя таблица cats и своя таблица связей

    ок, ща свалим в одну, посмотрим...

    512 там потому, что нужно просто понять как это будет работать, ибо сейчас всего процентов 5 от того что будет в итоге, поэтому и насилуем маааленькую железяку
     
  3. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    item_id IN (100, 101, 102) будет работать всяк быстрее чем 100 UNION 101 UNION 102 ибо одно чтение с одним фильтром а не три-три. особенно если таблицы приходится читать с диска. кстати, explain до сих пор не показан
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    дай базу

    Добавлено спустя 50 секунд:
    теперь понятно почему тебе надо было автоматизировать процесс перевставки из одной таблицы в другую не вводя поля ручками.
     
  5. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    Докладываю

    переделал, свалил в одну базу, переделал структуру

    запрос получился вида

    Код (Text):
    1. select * from table where cat_id in (1,2,3....) AND .....
    20 тысяч строк из 700 категорий выбирает за 0.5-0.7 секунды на той же железке, правда загнал я пока 150 тысяч позиций, посмотрим что будет дальше

    настройки mysql не менял

    Код (Text):
    1. # of RAM but beware of setting memory usage too high
    2. #innodb_buffer_pool_size = 16M
    это строка у меня вообще закомментирована )
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    Дай новую базу и объясни блин зачем тебе один символ с конца отрезать?
     
  7. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    я всегда слушаю старших товарищей, поэтому от обрезания я то же ушел ) я теперь добавляю символ там где нужно )

    дамп не дам, сори ((( могу структуру таблиц только дать ((( данные не могу, они не мои и инфа там...ну вобщем нельзя (((
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    А зачем добавляешь символ? В чем идея с символом-то?

    И почему ты делаешь этот ужас на 512 метрах оперативы? Самый дешевый тариф?
     
  9. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    перенос строки там должен быть после последнего поля из БД

     
  10. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    что-то тут не так :)
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    а почему тебя это волнует? о_О

    ладно... ты ускорил процесс? =)
     
  12. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    150 тыс? Вроде как по предыдущей инфе там должно быть порядка 50 миллионов? Или ты о других "позициях"?
    п.с.
    Поясняй мысли, если вне контекста, мы ведь не телепаты. ;)
    п.п.с.
    А вообще, - зря зажал дамп базы, я бы потестировал малость. Потратил бы пару-тройку часов на сравнение портянки с UNION и нормальной структуры с нормальным запросом.

    Ну значит значение будет по умолчанию. Зависит от версии движка.
    Сделай как рекомендовано (...up to 50 - 80 % of RAM) и сравни результат с дефолтным.
     
  13. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    я же написал, что перегнал пока 150 тысяч )

    ок, сделаю отпишусь
     
  14. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    А можешь сказать почему ты выбрал 1000 однотипных таблиц вместо одной? Проблема то в этом, а не в связи многи-ко-многим.
     
  15. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    долго все это описывать, но необходимость в этом была, правда..
     
  16. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    Если проблема это отображение объектов на базу, то возожно такое решение:
    Делаешь одну таблицу с полным набором полей, плюс мета-поле "тип". Какие-то индексы придется сделать составными, unique(obj_type, id) например.
     
  17. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    Не верю! (с)
     
  18. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    Кстати, простая замена UNION на UNION ALL должна ускорить работы )))
     
  19. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    я так и сделал, одна таблица со всеми позициами и полями, далее мелкие "узкоспециализированные" )