Форумы портала PHP.SU » » Работа с СУБД » Запрос к бд

Страниц (1): [1]
 

1. Maskca - 18 Августа, 2011 - 15:03:05 - перейти к сообщению
Здравствуйте, мне нужен запрос к бд, допусти есть запрос:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM TABLE WHERE field1 = "фраза"

Мне нужно сделать запрос где field1 = фраза, но эта фраза может быть в начале, конце, посредине поля и т.д. Как мне узнать есть ли там эта фраза.Я пробивал как то так:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM TABLE WHERE field1 = "%фраза%"
, но ничего не выходит.
2. Мелкий - 18 Августа, 2011 - 15:03:53 - перейти к сообщению
SELECT * FROM TABLE WHERE field1 like "%фраза%"
3. Maskca - 18 Августа, 2011 - 15:05:08 - перейти к сообщению
Большое спасибо, помню что такое уже делал, но подзабыл)
4. integer - 18 Августа, 2011 - 16:06:54 - перейти к сообщению
Вопрос по теме...
Таблица имеет вид
CREATE TABLE IF NOT EXISTS `data` (
`field1` int(11) NOT NULL,
`field2` varchar(10) NOT NULL,
`field3` text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
В таблице около 5 миллионов записей размер данных в field3 около 1кб.
Нужно производить поиск в поле field3 точного слова или фразы
Запрос вида:
SELECT * FROM TABLE WHERE field3 LIKE "%слово или фраза%"
Возвращает около 10 подходящих под запрос rows. И выполняется около 3х минут.
Посоветуйте пожалуйста что-нибудь для повышения скорости (кроме апгрейда железа).
5. Мелкий - 18 Августа, 2011 - 16:24:16 - перейти к сообщению
sphinx
6. integer - 18 Августа, 2011 - 16:41:49 - перейти к сообщению
Большое спасибо. К сожалению не могу добавить спасибо в репутацию.
Цитата:
, количество сообщений оставленных Вами на форуме, недостаточно для данной операции.


Есть еще варианты ? Попроще... Улыбка
7. Мелкий - 18 Августа, 2011 - 16:59:39 - перейти к сообщению
Полнотекстового индекса не вижу.
8. integer - 18 Августа, 2011 - 18:37:35 - перейти к сообщению
Добавил индекс. Результатом доволен.
Я думал что фултекст работает только через MATCH(имя_поля) AGAINST('искомый_текст'),
а это не устраивало изза невозможности сортировки. Спасибо за помощ.
9. integer - 18 Августа, 2011 - 20:39:24 - перейти к сообщению
тестировал на базе 1млн, поиск занимал 3 сек
сейчас база уже 2млн записей и уже время поиска около минуты
хелп. что можно еще сделать ?
10. EuGen - 19 Августа, 2011 - 09:14:55 - перейти к сообщению
Зависит не только от самого индекса. В ряде случаев MySQL не будет его использовать, предпочтя FULL SCAN
От запросов вида %keyword% желательно избавляться всеми способами.
Разбивайте таблицы по устойчивому признаку (зависит от структуры), оптимизируйте алгоритм поиска в Вашем проекте. Ну и конечно, как сказано выше, http://sphinxsearch[dot]com
11. integer - 20 Августа, 2011 - 23:57:28 - перейти к сообщению
Цитата:
От запросов вида %keyword% желательно избавляться всеми способами.

к сожалению не получится.
решил перенести базу на другое железо. то что сейчас - очень уж слабое. в связи с чем еще вопрос.
сейчас база крутится на ноутбуке:
Acer Extensa 5220 / Mobile Intel Celeron 530, 1733 MHz (13 x 133) (1Mb L2) / 2Gb DDR2-667 (333)MHz / Hitachi HTS541612J9S (111 Gb) (5400 RPM) / Windows XP Pro SP3 32 bit

хочу собрать сервер специально только под базу.
AMD Athlon II X4 640 3,0 GHz; cache 512x4 KB
8Gb DDR3-2133
SSD 32-64 Gb
теоретически конфиг производительнее в 8 раз
могу я рассчитывать на 7-8 кратное увеличение скорости поиска ?
посоветуйте ос под это дело. чтоб занимала не много места на диске. php5+mysql5+apache2 и поддержка SSD TRIM
12. PATCH - 21 Августа, 2011 - 00:33:04 - перейти к сообщению
да вы пошутили насчет 3секунд а уж тем более насчет минуты)

полтора ляма записей формирование страницы за пол секунды учитывая что идут два запроса на вывод вводимой записи и на подсчет строк в бд.

характеристики пк... AMD athlon 64 x2 Dual core 5600+ , 2GB DDR2 , HDD 500GB 7200об/м объем буфера (16мб). Windows xp 32bit sp3

я уверен вполне с профессиональным сервером скажем 4 ядерный процессор от Intel + 4GB оперативы DDR3 и винчестер с 15000 оборотами (или) SSD такие запросы будут выводится менее чем за 0.1 секунды
13. integer - 21 Августа, 2011 - 02:59:06 - перейти к сообщению
размер моей базы когда в ней 5 000 000 записей = 6.5гб
если проиндексировать поля 1 и 2 то поиск по ним занимает меньше секунды. но мне не нужен поиск по ним.
мне нужно искать только в 3м поле (в тексте около 1кб) слово или фразу. и возвращать значения полей 1 и 2 в поле 3 которых встречается это слово или фраза.
и такой запрос реально выполняется около 2х минут на ноуте.

 

Powered by ExBB FM 1.0 RC1