SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 14.12.2012 17:30:26

dimsich
Участник
Зарегистрирован: 12.12.2011
Сообщений: 17

Вопрос по поводу индексов

ЕСТЬ ТАБЛИЦА
CREATE TABLE IF NOT EXISTS `tbl_dictionary` (
  `id` int(3) unsigned NOT NULL auto_increment,
  `type` varchar(50) NOT NULL,
  `item_id` varchar(20) NOT NULL default '0',
  `language` char(2) NOT NULL default '',
  `content` mediumtext NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `Second` (`type`,`item_id`,`language`),
  KEY `type` (`type`,`language`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=85053 ;

ЗАПРОС
SELECT content, language FROM tbl_dictionary WHERE type='mdl_news_title' AND item_id='4479' AND language IN ('ua','ru')

Составной индекс KEY `type`я так понимаю здесь не правильно указан. И зачем здесь используется   UNIQUE KEY `Second` ???

И как правильно составить индекс.
Буду очень благодарен за ответ

Неактивен

 

#2 14.12.2012 19:02:50

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

Re: Вопрос по поводу индексов

Как использовать составные ключи, в каких случаях они работают? FAQ №5

dimsich написал:

Составной индекс KEY `type`я так понимаю здесь не правильно указан.

Для данного запроса не нужен, но возможно есть другие запросы для которых он необходим.

Смущает
  `item_id` varchar(20) NOT NULL default '0',
`item_id` число?

Неактивен

 

#3 14.12.2012 20:47:45

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Вопрос по поводу индексов

vasya написал:

`item_id` число?

Так эта ж...

AND item_id='4479'

dimsich написал:

И как правильно составить индекс

Чую, что неправильный тут индекс как раз тот, что уникальный. Языков скорее всего 2-5, типов тоже немного, а вот судя по 4479 - item_id - самый селективный параметр, поэтому скорее всего должно быть

UNIQUE KEY `Second` (`item_id`,`type`,`language`),


что раньше - язык или тип зависит от конкретных данных (чего больше разновидностей то и на втором месте). Аналогично со вторым индексом. Нужен он или нет вообще, можно понять только по реальным запросам из этой таблицы.

Неактивен

 

#4 14.12.2012 21:45:15

dimsich
Участник
Зарегистрирован: 12.12.2011
Сообщений: 17

Re: Вопрос по поводу индексов

Спасибо большое, попробую.

Неактивен

 

#5 14.12.2012 21:47:16

dimsich
Участник
Зарегистрирован: 12.12.2011
Сообщений: 17

Re: Вопрос по поводу индексов

item_id и меня смущает, дело в том, что базу не я разрабатывал, попросили помочь оптимизировать запросы. По EXPLAIN все индексы используються.

Неактивен

 

#6 14.12.2012 21:58:47

dimsich
Участник
Зарегистрирован: 12.12.2011
Сообщений: 17

Re: Вопрос по поводу индексов

если item_id число, и я сделаю его int, как Вы думаете ускориться выборка из базы?

Неактивен

 

#7 14.12.2012 22:03:28

dimsich
Участник
Зарегистрирован: 12.12.2011
Сообщений: 17

Re: Вопрос по поводу индексов

И ещё вопрос. Если я допустим через phpmyadmin поменяю тип с VARCHAR на INT не повредяться ли данные?

Неактивен

 

#8 15.12.2012 09:13:03

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

Re: Вопрос по поводу индексов

dimsich написал:

если item_id число, и я сделаю его int, как Вы думаете ускориться выборка из базы?

Да

dimsich написал:

И ещё вопрос. Если я допустим через phpmyadmin поменяю тип с VARCHAR на INT не повредяться ли данные?

phpmyadmin плохое решение.
Для изменения данных

alter table `tbl_dictionary` `item_id` modify int unsigned NOT NULL default 0;

Возможно вместо int подойдет smallint (значения от 0 до 65 535) или mediumint (0 - 16 777 215).

Не забудьте сделать резервную копию перед изменением структуры. http://sqlinfo.ru/forum/viewtopic.php?id=583

Неактивен

 

#9 15.12.2012 11:42:22

dimsich
Участник
Зарегистрирован: 12.12.2011
Сообщений: 17

Re: Вопрос по поводу индексов

Спасибо за ответ, реализую, отпишусь о результате.

Неактивен

 

Board footer

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