Forum Webscript.Ru
Программирование => PHP => Тема начата: Zzzz от 26 Января 2003, 13:59:35
-
У меня есть в MySQL таблица на 600 мегов, так вот, мне нужно сделать по ней поиск. Я написал поиск, но он при открытии таблицы грузит её всю в оперативку, а как сделать чтобы нормально искал по такому объёму?
Если нужно, то в таблице примерно 4700000 записей...
-
У меня есть в MySQL таблица на 600 мегов, так вот, мне нужно сделать по ней поиск. Я написал поиск, но он при открытии таблицы грузит её всю в оперативку, а как сделать чтобы нормально искал по такому объёму?
Это как же ты ишешь? Достаёшь всю таблицу и по ней ПХПшными функциями... Это не правильно. Надо индексы делать...
-
Tronyx
А как ?
Можно пример ?
-
а что стандартный способ формирования запроса к базе а потом обработки результата не помогает?
-
Zzzz пока нет, т.к. не известно что из себя представляют эти 600 мегов, конкретизируй.
-
надо доставать из базы только те поля которые тебе понадабятся... а не все... вобщем select * непрокатит...
потом если уж даже в этом случае очень много достаётся то можно лимитами достовать... скажем по 1000 записей... ну или сколько там в голову взбредёт...
-
nagash слышишь звон, да не знаешь где он. Не думай, что ты один здесь "умный". Звездочка, не звёздочка один х.. - 600 мегов, ИМХО без индексов не обойтись, хотя черт его знает какие там у него данные.
-
Zzzz
таблица для того и придумана, чтобы для поиска не грузить все в память.
поиск делается оператором WHERE
надо тебе найти всеш людей, имя которых Вася -
SELECT * from table where name=\'Вася\'
если нужно неполное совпадение - вместо = пишется LIKE
SELECT * from table where name LIKE \'В%\'
найдет тебе все имена, начинающиеся на В
SELECT * from table where text LIKE \'%город%\' OR text LIKE \'%деревня%\'
найдет все записи в поле text которых есть слово город или деревня
-
nagash слышишь звон, да не знаешь где он. Не думай, что ты один здесь "умный".
эм... я конечно извиняюсь но откуда появилось такое предположение? я просто дал свой совет... разве нет? м...? или здесь только ты можешь советы давать? получается типа форум одного модератора... так?
обоснуй...
-
или здесь только ты можешь советы давать? получается типа форум одного модератора... так?
Нет конечно, советуй на здоровье.
я конечно извиняюсь но откуда появилось такое предположение? я просто дал свой совет... разве нет? м...?
Звездочка, не звёздочка один х.. - 600 мегов
Просто проблема скорее всего в самом алгоритме поиска, потому что если он достаёт ВСЮ таблицу то память по любому кончится и отсутствие "*" - не спасёт, а если доставать только те строки которые нужны, то даже если стоит "*" она не чего не испортит.
PS моё замечение относится только к "звездочки", про лимит всё верно.
-
В этой базе данных хранится база данных МГТС, со стандартными полями.
Так вот, мне надо производить по ней поиск в зависимости от ведённых данных. Например если я ввёл поиск по телефонному номеру, то мне нужно искать только телефонный номер, а если я ввёл адрес, то искать нужно адрес.
-
Так чего же ты мозги нам пудришь? Используй, как Ромик посоветовал оператор WHERE и будет тебе счастье и благоденствие. А если результатов слишком много - LIMIT спасет отца русской демократии.
[OFF]
Так и не понял - причем тут гружение таблицы в память?
[/OFF]
-
Zzzz
В этой базе данных хранится база данных МГТС, со стандартными полями.
А откуда, например мне, знать, что там за поля. Объясни, что там за названия и типы полей. Приведи всю структуру. Потом нормально объясни, что не получается, чего хочешь. А то ведь все обсуждают, а тебя и нет.
Если понятливый, то юзай первый ответ Ромика в этой теме.
-
Так вот, мне надо производить по ней поиск в зависимости от ведённых данных. Например если я ввёл поиск по телефонному номеру, то мне нужно искать только телефонный номер, а если я ввёл адрес, то искать нужно адрес.
Ууууууу как всё запущено... Ты бы хоть SQL подъучил! Значит так, идика учи - http://sql.ru/docs/sql/u_sql/