Код (Text): 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 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 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 Что это вообще такое? почему тут на каждый айдишник категории своя таблица?
у каждой таблицы items своя таблица cats и своя таблица связей ок, ща свалим в одну, посмотрим... 512 там потому, что нужно просто понять как это будет работать, ибо сейчас всего процентов 5 от того что будет в итоге, поэтому и насилуем маааленькую железяку
item_id IN (100, 101, 102) будет работать всяк быстрее чем 100 UNION 101 UNION 102 ибо одно чтение с одним фильтром а не три-три. особенно если таблицы приходится читать с диска. кстати, explain до сих пор не показан
дай базу Добавлено спустя 50 секунд: теперь понятно почему тебе надо было автоматизировать процесс перевставки из одной таблицы в другую не вводя поля ручками.
Докладываю переделал, свалил в одну базу, переделал структуру запрос получился вида Код (Text): select * from table where cat_id in (1,2,3....) AND ..... 20 тысяч строк из 700 категорий выбирает за 0.5-0.7 секунды на той же железке, правда загнал я пока 150 тысяч позиций, посмотрим что будет дальше настройки mysql не менял Код (Text): # of RAM but beware of setting memory usage too high #innodb_buffer_pool_size = 16M это строка у меня вообще закомментирована )
я всегда слушаю старших товарищей, поэтому от обрезания я то же ушел ) я теперь добавляю символ там где нужно ) дамп не дам, сори ((( могу структуру таблиц только дать ((( данные не могу, они не мои и инфа там...ну вобщем нельзя (((
А зачем добавляешь символ? В чем идея с символом-то? И почему ты делаешь этот ужас на 512 метрах оперативы? Самый дешевый тариф?
150 тыс? Вроде как по предыдущей инфе там должно быть порядка 50 миллионов? Или ты о других "позициях"? п.с. Поясняй мысли, если вне контекста, мы ведь не телепаты. п.п.с. А вообще, - зря зажал дамп базы, я бы потестировал малость. Потратил бы пару-тройку часов на сравнение портянки с UNION и нормальной структуры с нормальным запросом. Ну значит значение будет по умолчанию. Зависит от версии движка. Сделай как рекомендовано (...up to 50 - 80 % of RAM) и сравни результат с дефолтным.
А можешь сказать почему ты выбрал 1000 однотипных таблиц вместо одной? Проблема то в этом, а не в связи многи-ко-многим.
Если проблема это отображение объектов на базу, то возожно такое решение: Делаешь одну таблицу с полным набором полей, плюс мета-поле "тип". Какие-то индексы придется сделать составными, unique(obj_type, id) например.