размер моей базы когда в ней 5 000 000 записей = 6.5гб
если проиндексировать поля 1 и 2 то поиск по ним занимает меньше секунды. но мне не нужен поиск по ним.
мне нужно искать только в 3м поле (в тексте около 1кб) слово или фразу. и возвращать значения полей 1 и 2 в поле 3 которых встречается это слово или фраза.
и такой запрос реально выполняется около 2х минут на ноуте.
От запросов вида %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
Добавил индекс. Результатом доволен.
Я думал что фултекст работает только через MATCH(имя_поля) AGAINST('искомый_текст'),
а это не устраивало изза невозможности сортировки. Спасибо за помощ.
Вопрос по теме...
Таблица имеет вид
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х минут.
Посоветуйте пожалуйста что-нибудь для повышения скорости (кроме апгрейда железа).
Он получает файл с сервера по фтп и пишет его в переменную $data через временный файл.
Можно ли обойтись без временного файла ? Т.е. сразу читать файл с фтп в переменную ?
Как можно выразить эти 2 запроса одним ? И возможно ли вообще ?
SELECT MAX(time) FROM visitors WHERE ip='127.0.0.1' AND registered=0
UPDATE visitors SET registered=1 WHERE ip='127.0.0.1' AND registered=0 AND time=(тут то что получили в 1м запросе)
Такой вот запрос не проходит ):
UPDATE visitors SET registered=1 WHERE ip='127.0.0.1' AND registered=0 AND MAX(time)
Заранее извиняюсь за неудобства, дело в том что все телепаты сейчас в отпуске.
Поэтому может ты выложишь текст скрипта и ошибку которая выдается чтоб мы посмотрели в чем дело ?