SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 02.02.2012 13:13:33

stasuss
Участник
Зарегистрирован: 30.11.2011
Сообщений: 10

Как быть с разным количеством полей при поиске?

есть таблица хранящая разную информацию о людях, в том числе их ФИО. Фио в трех разных колонках. Запрос может быть как с одним параметром, например отчество, так и с двумя и с тремя. Количество записей близко к миллиону. Есть индексы по этим трем колонкам с длинной 10 символов. Проблема в том что запрос выполняется очень долго.

В експлейне написано что вроде как подхватываются одиночные индексы по мере необходимости.

А с многоколоночным индексом я не совсем понимаю как управляться. Если его создавать для этих трех колонок то какую длину указывать?

Спасибо

Неактивен

 

#2 02.02.2012 13:22:18

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Как быть с разным количеством полей при поиске?

В три раза больше?

А вам точно на одиночные колонки нужна длинна в 10 символов? Например, для имени? Много ли у вас разных имен длинной >9 ?

Неактивен

 

#3 02.02.2012 13:27:13

stasuss
Участник
Зарегистрирован: 30.11.2011
Сообщений: 10

Re: Как быть с разным количеством полей при поиске?

сначала сделал длину 4, но уникальность индекса получилась мягко говоря фиговая. решил увеличить значение.. может я не верно понимаю идиалогию индексов правда.

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

и еще. правильно ли я понял понятие "покрывающего индекса". это когда индекс на всю возможную длину поля или как?

Отредактированно stasuss (02.02.2012 13:31:42)

Неактивен

 

#4 02.02.2012 13:41:10

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Как быть с разным количеством полей при поиске?

stasuss написал:

сначала сделал длину 4, но уникальность индекса получилась мягко говоря фиговая. решил увеличить значение.. может я не верно понимаю идиалогию индексов правда.

Правильно понимаете, но увеличивать надо без фанатизма, постепенно, смотря при этом на уникальность (индивидуально для каждой колонки).
Интуитивно, кажется, что 10 для имени перебор.





stasuss написал:

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

Думаю, да.



stasuss написал:

и еще. правильно ли я понял понятие "покрывающего индекса". это когда индекс на всю возможную длину поля или как?

ИМХО, это когда все выбираемые колонки присутствуют в индексе и для выполнения запроса не нужно обращаться к самой таблице.

Неактивен

 

#5 02.02.2012 13:46:19

stasuss
Участник
Зарегистрирован: 30.11.2011
Сообщений: 10

Re: Как быть с разным количеством полей при поиске?

спасибо за ответы.

но все таки как лучше организовать индексацию? три разных индекса или один?

и какую длину указывать у многоколоночного индекса? например есть три поля по 10 символов, то индекс создавать длинной 30 символов или 10? или еще как то? не совсем понимаю как он создается. конкатенацией или хитрым хешированием всех входящих колонок в одну..

Неактивен

 

#6 02.02.2012 13:54:14

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Как быть с разным количеством полей при поиске?

Посмотрите FAQ пункт 5.
Там прям как по заказу есть разбор интересующих вас вопросов smile

Неактивен

 

#7 02.02.2012 13:59:08

stasuss
Участник
Зарегистрирован: 30.11.2011
Сообщений: 10

Re: Как быть с разным количеством полей при поиске?

большое спасибо) вы мне очень помогли сегодня)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson