Есть ли смысл в двух ключах на одно и то же поле?

bankomat

Новичок
Есть ли смысл в двух ключах на одно и то же поле?

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

Постянно натыкаюсь на следующую ситуацию: Таблица. Поле id. На это поле повешан первичный автоинкрементный (иногда неавтоинкрементный) ключ. И на это же поле повешан еще один ключ (иногда уникальный, иногда - нет).

В этой конструкции есть какой либо смысл или нет? Я эти дублирующие ключи без зазрения совести удаляю, но тут встретилась таблица, где на поле id кроме первичного ключа повесили еще ДВА уникальных индекса. Тут уж меня начали терзать сомнения. Может быть я чего-то не соображаю?

Ладно бы составные ключи, тут смысл понятен. Но абсолютно одинаковые, одинарные ключи на одно и то же поле с первичным ключем.

Таблицы MyIsam'овские

Я в панике.
 

findnext

Новичок
bankomat покажи show create table (повесили еще ДВА уникальных индекса), очень посмотреть хочется
 

zerkms

TDD infected
Команда форума
findnext
а в чём техническая проблема повешать два уникальных индекса на таблицу?
 

bankomat

Новичок
Автор оригинала: findnext
bankomat покажи show create table (повесили еще ДВА уникальных индекса), очень посмотреть хочется
Нет проблем. Вот например.


PHP:
CREATE TABLE `comments` (
 `id` int(15) NOT NULL auto_increment,
 `where` int(15) NOT NULL default '0',
 `page_id` int(11) NOT NULL,
 `user_id` int(11) NOT NULL,
 `message` text NOT NULL,
 `date` int(15) NOT NULL default '0',
 `reply` int(11) default '0',
 `karma` int(11) default '0',
 `ip` varchar(15) default NULL,
 PRIMARY KEY  (`id`),
 UNIQUE KEY `id` (`id`),
 KEY `idx_comments` (`id`),
 KEY `where` (`where`),
 KEY `page_id` (`page_id`),
 KEY `user_id` (`user_id`),
 KEY `date` (`date`),
 KEY `reply` (`reply`),
 KEY `karma` (`karma`),
 KEY `page_id_where` (`page_id`,`where`)
) ENGINE=MyISAM AUTO_INCREMENT=1034078 DEFAULT CHARSET=cp1251
Вон они: id и idx_comments. Правда здесь только один уникальный, но один фиг как говорится.

-~{}~ 13.08.09 11:44:

Автор оригинала: zerkms
findnext
а в чём техническая проблема повешать два уникальных индекса на таблицу?
Нет, технически то возможно. Меня взволновала логика данного мероприятия. Какую это может принести пользу? Оставлять "как было" не хочется, потому что по идее вставка замедляется на каждом новом индексе. Да и объемы...

-~{}~ 13.08.09 11:49:

Может чем больше индексов на поле, тем быстрее ищется? :)
 

Mols

Новичок
Никакой тут логики нет. Beavis +1

-~{}~ 13.08.09 10:55:

При поиске всегда только один индекс используется. Тот который БД считает наиболее оптимальным.
 

bankomat

Новичок
Автор оригинала: Mols
Никакой тут логики нет. Beavis +1

-~{}~ 13.08.09 10:55:

При поиске всегда только один индекс используется. Тот который БД считает наиболее оптимальным.
И я так думаю. Но люди зачем то же ставили?

А существует ли какое-то преимущество KEY или UNIQUE KEY перед PRIMARY? То есть могут существовать такие хитрые запросы, где MySQL предпочтет не PRIMARY а KEY или UNIQUE KEY на то же самое поле?
 

findnext

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

Adelf

Administrator
Команда форума
А существует ли какое-то преимущество KEY или UNIQUE KEY перед PRIMARY? То есть могут существовать такие хитрые запросы, где MySQL предпочтет не PRIMARY а KEY или UNIQUE KEY на то же самое поле?
Нет.
тут сказано уже было несколько раз - удаляй их. оставь только PRIMARY.
 

zerkms

TDD infected
Команда форума
findnext
если ты это всё прекрасно понимаешь, зачем тогда тебе схема базы? :)
 

Alexandre

PHPПенсионер
можно удалить практически все ключи кроме примари и юзер_иди.
надо еще смотреть эксплаины запросов,
или хотя бы все запросы визуально, чтоб знать какие ключи используются. Возможно нужно использовать комбинированные ключи (один ключ на два-три поля)
 

Beavis

Banned
да просто нечаянно навешали индексов и оставили так, т.к. всё работает
 

bankomat

Новичок
Автор оригинала: Alexandre
можно удалить практически все ключи кроме примари и юзер_иди.
Ок, спасибо.

Кстати, чуть не пропустил одну штуку. Ведь в запросах могут быть прямым образом указано какие индексы использовать или не использовать. USE KEY. IGNORE KEY, FORCE KEY. И вдруг в каких нибудь запросах так и указаны эти индексы, которые я собрался поудалять.

Поискал по скриптам - нет, вроде нигде нет. Буду казнить.
 

Alexandre

PHPПенсионер
эксперты с хрустальными шарами подтянулись.
zerkms, как всегда ты о главном умолчал:
надо еще смотреть эксплаины запросов,
или хотя бы все запросы визуально, чтоб знать какие ключи используются
-~{}~ 13.08.09 15:15:

да просто нечаянно навешали индексов и оставили так, т.к. всё работает
навеша на далекое будущее... ;)
 

zerkms

TDD infected
Команда форума
Alexandre
я наоборот подчеркнул неправильный посыл из твоего коммента. Ты предлагаешь сначала снести, потом смотреть. Хотя нужно действовать наоборот. Не?
 

Alexandre

PHPПенсионер
спокойстивие и только спокойствие
пустяки, дело житейское...
 
Сверху