SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

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

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

Вы не зашли.

#1 28.11.2011 18:46:32

lepriconl
Участник
Зарегистрирован: 28.11.2011
Сообщений: 6

Помогите сравнить две таблицы MySQL

Есть две таблицы SLOVAR(id,slovo) ARTICLES(id,slovo), ы первой таблице данные такие  (1,хлеб) (2,пирожок) (3,тунец), во второй данные такие (1,колбаса)(2,хлеб)(3,хлебница) я делаю вот такой запрос 'SELECT * from articles where (articles.slovo=ANY (select slovo from slovar))' он мне честно находит слово "хлеб"... как сделать так, чтобы он мне нашел и "хлеб" и "хлебница"?

я незнаю хлеб там или нет... я в том селекте который написал показываю что я незнаю что я сравниваю.... я просто нахожу одинаковые слова в двух таблицах... но мне нужно не только 100% совпадение, а и совпадение по правилу LIKE "хлеб%"...

Неактивен

 

#2 28.11.2011 18:56:32

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите сравнить две таблицы MySQL

Что-то такое?
select * from SLOVAR s join ARTICLES a on a.slovo like CONCAT('%', s.slovo, '%');

Код:

mysql> set names 'utf8';
Query OK, 0 rows affected (0.00 sec)

mysql> create table t_5013_ARTICLES(id int,slovo varchar(255));
Query OK, 0 rows affected (0.00 sec)

mysql> create table t_5013_SLOVAR(id int,slovo varchar(255));
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t_5013_ARTICLES values(1,'колбаса'),(2,'хлеб'),(3,'хлебница');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> insert into t_5013_SLOVAR values(1,'хлеб'),(2,'пирожок'),(3,'тунец');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from t_5013_SLOVAR s join t_5013_ARTICLES a on a.slovo like CONCAT('%', s.slovo, '%');
+------+----------+------+------------------+
| id   | slovo    | id   | slovo            |
+------+----------+------+------------------+
|    1 | хлеб |    2 | хлеб         |
|    1 | хлеб |    3 | хлебница |
+------+----------+------+------------------+
2 rows in set (0.00 sec)

Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 28.11.2011 19:42:46

lepriconl
Участник
Зарегистрирован: 28.11.2011
Сообщений: 6

Re: Помогите сравнить две таблицы MySQL

хм... оно то работает но ооочень медленно... почему? таблица slovar имеет 1 500 000 строк, articles 200 000 строк.... но это не может быть так долго.... а там поиск идет реально минут 6.... как это может быть? и как это поправить.... но за пример огромнейшее спасибо...

Неактивен

 

#4 01.12.2011 20:57:56

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите сравнить две таблицы MySQL

lepriconl, добавьте индексы на поле slovo в обеих таблицах и сравните скорости.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 21.01.2012 19:14:52

kuzroman
Завсегдатай
Зарегистрирован: 28.04.2010
Сообщений: 37

Re: Помогите сравнить две таблицы MySQL

реально Бодхисаттва)) Спасибо.

Неактивен

 

#6 21.01.2012 19:58:44

kuzroman
Завсегдатай
Зарегистрирован: 28.04.2010
Сообщений: 37

Re: Помогите сравнить две таблицы MySQL

Только на сколько я помню LIKE не поддерживает никакую индексацию(вообще) и работает значительно медленнее чем полнотекстовый поиск.
Это на будущее.

Неактивен

 

#7 21.01.2012 20:14:47

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите сравнить две таблицы MySQL

Если искомая величина приходится на начало строки (т.е. поиск идет по 'слово%'), то индекс будет использован.

Неактивен

 

#8 21.01.2012 20:35:20

kuzroman
Завсегдатай
Зарегистрирован: 28.04.2010
Сообщений: 37

Re: Помогите сравнить две таблицы MySQL

спасибо не не слышал об этом! Это во всех движках?

Неактивен

 

#9 21.01.2012 20:39:17

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите сравнить две таблицы MySQL

Да.

Неактивен

 

Board footer

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