SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

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

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

Вы не зашли.

#1 28.03.2012 10:41:30

Фяшя
Участник
Зарегистрирован: 22.02.2011
Сообщений: 11

Помогите с несколькими WHERE и ORDER

Я новичок. Недавно узнал что
По каким полям делаются ORDER или WHERE - те поля надо делать ключами

/************************************************************/
у меня есть таблица

id *ключ* | name | city | bdate | sex | country | photo_id | time
...
...
80 000 000 строк...

из из него я делаю запросы типа


SELECT id from TABLE WHERE (YEAR(bdate) BETWEEN '1985' AND '1990') AND sex=1 and time>0 and photo_id!=1;
 




/************************************************************/


Правильно ли будет делать все поля ключами? Если у меня приложение для поиска людей по параметрам.. иногда по дате рождения иногда по полу иногда по городу...

id *ключ* | name | city *ключ* | bdate *ключ* | sex *ключ* | country *ключ* | photo_id *ключ* | time *ключ*
...
...
80 000 000 строк...

И вообще есть ли понятие "избыток ключей" ?? избыток может нагрузить систему?

Неактивен

 

#2 28.03.2012 11:01:20

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Помогите с несколькими WHERE и ORDER

Каждый ключ нужно обрабатывать при добавлении или обновлении данных в строке.
При поиске может использоваться только один ключ, поэтому имеет смысл сделать
индекс над несколькими часто используемыми полями.

Тот запрос, который Вы написали, использовать индексы не будет, т.к. он выберет
почти всю базу. Единственное разумное ограничение, которое в нем можно придумать,
это индекс над датой рождения и переписать его в виде
bdate BETWEEN '1985-01-01' and '1990-12-31'

Неактивен

 

#3 28.03.2012 11:17:44

Фяшя
Участник
Зарегистрирован: 22.02.2011
Сообщений: 11

Re: Помогите с несколькими WHERE и ORDER

Каждый ключ нужно обрабатывать при добавлении или обновлении данных в строке. написал:

Можно поподробнее?
как лучше организовать таблицу в моем случаи?

Неактивен

 

#4 28.03.2012 15:07:29

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

Re: Помогите с несколькими WHERE и ORDER

Грубо: ключ это копия таблицы отсортированная по ключевому полю. Изменение данных приводит к тому, что данная копия должна перестраиваться, чтобы по прежнему быть отсортированной по ключевому полю. Чем больше ключей, тем больше копий таблицы, они больше занимают места на диске и запросы на изменение данных замедляются, так как нужно внести изменения во все копии, а некоторые ещё и перестроить при этом.

Неактивен

 

Board footer

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