|
Помогите определиться со структурой базы
|
|||
---|---|---|---|
#18+
база объявлений для сайта каждое объявление может иметь от 0 до 10 почтовых индексов, по которым будет производится поиск. Сразу решил разбить на 2 таблицы main (id int, text char, ... ) - главная и подчиненная zips (id int, zip int) потом пришла мысль добавить в главную varchar поле где индексы будут хранится через "-", например "-1111111-2222222-333333-", а поиск выполнять через regexp. забил базу 100 000 записями и при сравнении получил следующее запрос select main.* from main left join zips on zips.id=main.id where zips.zip in (...,...,...) выполнялся в 2 раза медленнее чем select main.* from main where ( zip regexp "-2222222-" or zip regexp "-3333333-") при уменьшении количества записей разница во времени выполнения запроса уменьшалась. запрос с regexp выполнялся дольше только при 5 000 записях и длинных значениях в поле zip типа "-22222-333333-444444-555555-66666666-77777777-8888888-" когда искомый индекс находился в конце строки (-8888888-). Если кто-нибудь сталкивался уже с подобным или имеет соображения, подскажите, что выбрать Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2002, 16:46 |
|
Помогите определиться со структурой базы
|
|||
---|---|---|---|
#18+
Первой, что приходит в голову, так это то что по шаблону LIKE "%search_text" не используются индексы в отличии LIKE "search_text%". Тоже правило действует на REGEXP(). А я бы хранил все без дополнительного поля, просто в отдельной таблице! ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2002, 16:56 |
|
|
start [/forum/topic.php?fid=47&fpage=712&tid=1856209]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
123ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
170ms |
get tp. blocked users: |
2ms |
others: | 311ms |
total: | 649ms |
0 / 0 |