Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Запрос к бд

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Maskca
Отправлено: 18 Августа, 2011 - 15:03:05
Post Id


Частый гость


Покинул форум
Сообщений всего: 167
Дата рег-ции: Май 2009  


Помог: 0 раз(а)




Здравствуйте, мне нужен запрос к бд, допусти есть запрос:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM TABLE WHERE field1 = "фраза"

Мне нужно сделать запрос где field1 = фраза, но эта фраза может быть в начале, конце, посредине поля и т.д. Как мне узнать есть ли там эта фраза.Я пробивал как то так:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM TABLE WHERE field1 = "%фраза%"
, но ничего не выходит.


-----
http://view-tv[dot]ru - Бесплатное телевидение, кино, радио
 
 Top
Мелкий Супермодератор
Отправлено: 18 Августа, 2011 - 15:03:53
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




SELECT * FROM TABLE WHERE field1 like "%фраза%"


-----
PostgreSQL DBA
 
 Top
Maskca
Отправлено: 18 Августа, 2011 - 15:05:08
Post Id


Частый гость


Покинул форум
Сообщений всего: 167
Дата рег-ции: Май 2009  


Помог: 0 раз(а)




Большое спасибо, помню что такое уже делал, но подзабыл)


-----
http://view-tv[dot]ru - Бесплатное телевидение, кино, радио
 
 Top
integer
Отправлено: 18 Августа, 2011 - 16:06:54
Post Id


Новичок


Покинул форум
Сообщений всего: 35
Дата рег-ции: Нояб. 2006  


Помог: 0 раз(а)




Вопрос по теме...
Таблица имеет вид
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х минут.
Посоветуйте пожалуйста что-нибудь для повышения скорости (кроме апгрейда железа).
 
 Top
Мелкий Супермодератор
Отправлено: 18 Августа, 2011 - 16:24:16
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




sphinx


-----
PostgreSQL DBA
 
 Top
integer
Отправлено: 18 Августа, 2011 - 16:41:49
Post Id


Новичок


Покинул форум
Сообщений всего: 35
Дата рег-ции: Нояб. 2006  


Помог: 0 раз(а)




Большое спасибо. К сожалению не могу добавить спасибо в репутацию.
Цитата:
, количество сообщений оставленных Вами на форуме, недостаточно для данной операции.


Есть еще варианты ? Попроще... Улыбка
 
 Top
Мелкий Супермодератор
Отправлено: 18 Августа, 2011 - 16:59:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Полнотекстового индекса не вижу.


-----
PostgreSQL DBA
 
 Top
integer
Отправлено: 18 Августа, 2011 - 18:37:35
Post Id


Новичок


Покинул форум
Сообщений всего: 35
Дата рег-ции: Нояб. 2006  


Помог: 0 раз(а)




Добавил индекс. Результатом доволен.
Я думал что фултекст работает только через MATCH(имя_поля) AGAINST('искомый_текст'),
а это не устраивало изза невозможности сортировки. Спасибо за помощ.
 
 Top
integer
Отправлено: 18 Августа, 2011 - 20:39:24
Post Id


Новичок


Покинул форум
Сообщений всего: 35
Дата рег-ции: Нояб. 2006  


Помог: 0 раз(а)




тестировал на базе 1млн, поиск занимал 3 сек
сейчас база уже 2млн записей и уже время поиска около минуты
хелп. что можно еще сделать ?
 
 Top
EuGen Администратор
Отправлено: 19 Августа, 2011 - 09:14:55
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Зависит не только от самого индекса. В ряде случаев MySQL не будет его использовать, предпочтя FULL SCAN
От запросов вида %keyword% желательно избавляться всеми способами.
Разбивайте таблицы по устойчивому признаку (зависит от структуры), оптимизируйте алгоритм поиска в Вашем проекте. Ну и конечно, как сказано выше, http://sphinxsearch[dot]com


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
integer
Отправлено: 20 Августа, 2011 - 23:57:28
Post Id


Новичок


Покинул форум
Сообщений всего: 35
Дата рег-ции: Нояб. 2006  


Помог: 0 раз(а)




Цитата:
От запросов вида %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
 
 Top
PATCH
Отправлено: 21 Августа, 2011 - 00:33:04
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 924
Дата рег-ции: Апр. 2011  


Помог: 22 раз(а)




да вы пошутили насчет 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 секунды
Прикреплено изображение (Нажмите для увеличения)
1.jpg

(Отредактировано автором: 21 Августа, 2011 - 00:35:19)

 
 Top
integer
Отправлено: 21 Августа, 2011 - 02:59:06
Post Id


Новичок


Покинул форум
Сообщений всего: 35
Дата рег-ции: Нояб. 2006  


Помог: 0 раз(а)




размер моей базы когда в ней 5 000 000 записей = 6.5гб
если проиндексировать поля 1 и 2 то поиск по ним занимает меньше секунды. но мне не нужен поиск по ним.
мне нужно искать только в 3м поле (в тексте около 1кб) слово или фразу. и возвращать значения полей 1 и 2 в поле 3 которых встречается это слово или фраза.
и такой запрос реально выполняется около 2х минут на ноуте.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB