[LJ2ME]А кто у нас SQL знает?

Jan. 10th, 2008 06:32 pm
gianthare: (Default)
[personal profile] gianthare
Надо простейшую вещь сделать, но я что-то никак не пойму как. У меня есть таблица с двумя полями user,text. Мне надо выбрать N разных текстов, включающих заданное слово, так чтобы все тексты были разные и все были от разных пользователей. Пока что я дошел до
select distinct text from table where text like '% word %' group by user limit N;
но это работает не совсем верно (может не найти решение, если строки неудачно расположены), а главное ужасно медленно.

Робко..

Date: 2008-01-10 06:46 pm (UTC)
From: [identity profile] baba-lyuba.livejournal.com
Ну я, вроде, знаю. А зачем тебе distinct вместе с group by user? group by user и так выберет тебе по одному тексту от каждого юзера (причем из всех текстов, принадлежащих данному юзеру и удовлетворяющих условию text like '% word %', выберет наугад). У тебя могут быть одинаковые тексты у разных юзеров?
Медленно работает, вероятно, потому, что поиск идет по текстовому полю. И к тому же оператор like - не самый быстрый. Может лучше будет работать MATCH() AGAINST? (посмотри http://dev.mysql.com/doc/refman/5.0/en/fulltext-natural-language.html )
Если еще чего надумаю - скажу

Re: Робко..

Date: 2008-01-10 08:29 pm (UTC)
From: [identity profile] gianthare.livejournal.com
Конечно могут быть одинаковые тексты у разных юзеров, иначе я бы ограничился
SELECT DISTINCT user, text ...
без всякого GROUP
А GROUP вообще срабатывате до DISTINCT и берет первую подходящую строку.

Re: Робко..

Date: 2008-01-11 09:28 am (UTC)
From: [identity profile] baba-lyuba.livejournal.com
В общем смотри -
умные люди говорят, что сделать что-нибудь тяжело. Вот если бы у тебя все юзеры и все тексты были заданы id и были бы проиндексированы.. :)
Да, так вот люди говорят, что, как не удивительно, может быть быстрее будет работать с вложенным подзапросом - внутренний запрос выбирает все тексты, содержащие слово, а внешний запрос уже из этих текстов выбирает уникальные. А еще лучше, если бы можно было результаты внутреннего запроса скинуть в temporary table и проиндексировать ее хотя бы по юзерам. А потом уже к ней обращаться..

Profile

gianthare: (Default)
gianthare

February 2026

S M T W T F S
1234567
891011121314
15161718192021
222324 25 262728

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 6th, 2026 08:00 am
Powered by Dreamwidth Studios