SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 21.09.2010 22:57:58

Марк
Активист
Зарегистрирован: 31.05.2010
Сообщений: 157

Автоматическое распределение категорий

Здравствуйте. У меня есть 3 таблицы.

tb - описание товаров. temp_categoryId это номер категории из таблицы temp_category к которой принадлежит товар .
-----------------------
id name             categoryId  temp_categoryId
1  Справ. MySql  0               87
...

temp_category - таблица с категориями стороннего магазина. 3000 записей
-----------------------
id name   parent
67  Компы  0
87  Базы    67
...

category - мои категории lead - ключевые слова для поиска похожих категорий в temp_category. 80 записей
-----------------------
id name   parent  lead
4  компы  2         базы, sql
...

Задача присвоить товарам мои категории используя для этого категории магазина.
Категории магазина я нахожу с помощью ключевых слов в таблице category.

В результате должно получиться
tb
-----------------------
id name             categoryId  temp_categoryId
1  Справ. MySql   4              87
...


Запрос


update `tb`t,`category`ct SET t.`categoryId`=ct.`id`
WHERE t.`temp_categoryId` in(select id from `temp_category` where `name` like '%базы%' or `name` like '%sql%');

выполняется жутко долго всего на 5 тыс. а мне необходимо обновить более 600 тыс. записей.

Также делал.

select id from `temp_category` where `name` like '%базы%' or `name` like '%sql%'

потом в цикле
update ...


всё равно очень медленно. 400 тыс. за 17 мин. (2x AMD Athlon(tm) 64 X2 Dual Core Processor 4000+ 2089.317 MHz, 1,0 GB RAM)

Больше ни чего в голову не приходит. Может есть более оптимальный алгоритм?

Отредактированно Марк (22.09.2010 13:37:32)

Неактивен

 

#2 22.09.2010 13:33:29

Марк
Активист
Зарегистрирован: 31.05.2010
Сообщений: 157

Re: Автоматическое распределение категорий

Сделал маленькую таблицу с тремя полями

temp_my_category
--------------------------
id categoryId temp_categoryId
...


скорость выполнения меня очень удивило 400 тыс. за 1 мин 14 с.

Неактивен

 

#3 23.09.2010 15:54:15

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Автоматическое распределение категорий

Более оптимальный алгоритм — хранить данные так, чтобы можно было
использовать индекс. Любой LIKE '%data%' — это полное чтение таблицы.

Сделайте обычную табличку многие-ко-многим, добавьте индексы, и
всё начнет работать smile

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson