SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 22.11.2010 00:55:15

elslepas
Участник
Зарегистрирован: 31.10.2010
Сообщений: 16

Несколько ключей в одной таблице

Добрый день.
Имеется таблица
CREATE TABLE IF NOT EXISTS `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_country` int(11) NOT NULL,
  `id_city` int(11) NOT NULL,
  `date` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `contry_city` (`id_country`,`id_city`),
  KEY `country_city_date` (`id_country`,`id_city`,`date`),
  KEY `country_date` (`id_country`,`date`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;

В ней как вы уже успели заметить несколько составных ключей.
Вот результаты нескоторых запросов:

EXPLAIN SELECT * FROM `test` WHERE id_country = 21
possible_keys   contry_city,country_city_date,country_date   
key                contry_city    

EXPLAIN SELECT * FROM `test` WHERE id_country = 21 and id_city=106
possible_keys   contry_city,country_city_date,country_date   
key                contry_city    

EXPLAIN SELECT * FROM `test` WHERE id_country =21 and id_city =106 and date =1301558400
possible_keys   contry_city,country_city_date,country_date   
key                country_city_date

EXPLAIN SELECT * FROM `test` WHERE id_country = 21 and date = 1301558400
possible_keys   contry_city,country_city_date,country_date   
key                 country_date

Вопрос: для каждого ли запроса выбирается наилучший составной ключ? Сколько таблица может иметь ключей? Влияет ли количество ключей на скорость SELECT-ов, на UPDATE и DELETE я думаю что влияет?

Неактивен

 

#2 22.11.2010 01:51:41

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

Re: Несколько ключей в одной таблице

1. Обычно да.
2. Столько, сколько нужно для хорошей производительности.
3. Да, влияет. Каждый индекс надо сортировать и хранить wink

Учтите, что индексы используются как целиком, так и частями (т.е. в индексе могут
использоваться левые столбцы), поэтому индекс country_city — абсолютно бесполе-
зен (так как он полностью покрывается индексом country_city_date).

Неактивен

 

#3 01.12.2010 14:06:26

nexus
Завсегдатай
Зарегистрирован: 26.11.2010
Сообщений: 35

Re: Несколько ключей в одной таблице

Скажите, а нужно ли делать составной ключ, если у меня в запросе идет сортировка по нескольким полям.
Т.е. SELECT * FROM table WHERE field = 'test' ORDER BY field1 ASC, field2 ASC, fiels3 DESC

Нужно ли делать в этом случае составной ключ на 3 поля?

Неактивен

 

#4 01.12.2010 14:13:34

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

Re: Несколько ключей в одной таблице

Да.

Неактивен

 

Board footer

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