Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Оптимизация, индексы ? (divlweb) 31/10/2006 - 13:59:52
      Re: Оптимизация, индексы ? (divlweb) 31/10/2006 - 14:05:12
      Re: Оптимизация, индексы ? (WebGirl) 01/11/2006 - 16:19:06

> Original message text:
> From: divlweb - 31/10/2006 - 13:59:52
> Subject:Оптимизация, индексы ?
> -----------------
> нужно оптимизировать код, 40 000 записей в таблице и сервер начинает подвисать.
>
> CREATE TABLE tab (
> id` int(10) unsigned NOT NULL auto_increment,
> a int(10) unsigned NOT NULL default '0',
> b varchar(20) character set latin1 collate latin1_bin NOT NULL default '',
> c enum('yes','no') NOT NULL default 'no',
> d enum('yes','no') NOT NULL default 'yes',
> e int(10) unsigned NOT NULL default '0',
> v varchar(32) NOT NULL default '',
> PRIMARY KEY (id),
> UNIQUE KEY a_b_idx (a,b),
> KEY a (a),
> KEY a_c_idx (a,c),
> KEY d (d),
> KEY e (e),
> KEY a_d_idx (a,d),
> KEY v (v),
> ) ENGINE=MyISAM;
>
> предупреждение MySQL:
> UNIQUE and INDEX keys should not both be set for column `a`
> More than one INDEX key was created for column `a`
>
> А вот запросы которые нарпягают:
>
> a=* AND d='yes'
> a =* AND ( peer_id=* OR peer_id=*) (@1)
> a =* AND v=*
>
> ((@1) - В этом случае не отрабатывается кей "a_b_idx", как поправить ? (это очень важный момент)...
>
> ГУРУ ПОМОГИТЕ, РАЗОБРАТСЯ С ИНДЕКСАМИ!
>


From: WebGirl - 01/11/2006 - 16:19:06
Subject:Оптимизация, индексы ?
-----------------
1. a (a) - этот индекс, как и предупреждает mysql является лишним, потому как сортировка/выборка по полю a может использовать индексы a_b_idx, a_c_idx, a_d_idx

2. a =* AND ( peer_id=* OR peer_id=*) - или я туплю, или какая связь между peer_id и полем b? ну предположим, что peer_id это и есть b, тогда откуда у вас уверенность что mysql не использует индекс a_b_idx? тогда выходит, что mysql вообще никогда ни в каких случаях не использует многостолбцовые индексы, и вообще они существуют просто так, чтобы пользователи думали, что такая фича в MySQL-е есть :). но если предположить, что действительно не используется, то можно написать запрос как (a =* AND b=*) OR (a =* AND b=*), если уж и здесь MySQL не захочет использовать уникальный индекс, то такого быть не может

3. в целом структура таблицы нормальная, тормозить не должна, если вы конечно не пытаетесь выбрать сразу все 40 тыс. записей (LIMIT)


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
29994



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |