2010-12-06 4 views
1

Есть ли способ ускорить этот запрос. Его загрузка медленная и около 279 записей. Я проиндексировал поле данных & в данных. Есть ли что-нибудь еще, что я могу сделать?mysql query running slow

echo "<select name=language style='width: 136px;'>"; 
echo "<option value=$language selected=selected>-- Select --</option>"; 
$group1 = '<optgroup label=Common>'; 
$group2 = '<optgroup label=Alphabetically>'; 
$group = mysql_query("SELECT language, grouping, p_order FROM lang_list 
      WHERE grouping IN ('1','2') ORDER BY p_order"); 
while($row = mysql_fetch_array($group)) 
{ 
    if ($row['grouping'] == '1') 
    { 
     $group1 .= '<option value="'.$row['language'].'">'. 
      $row['language'].'</option>'; 
    } 
    else 
    { 
     $group2 .= '<option value="'.$row['language'].'">'. 
      $row['language'].'</option>'; 
    } 
    $group1 .= '</otpgroup>'; 
    $group2 .= '</otpgroup>'; 

    echo $group1; 
    echo $group2; 
    echo "</select>"; 
} 

Таблица

lang_list (
    id int(8) NOT NULL auto_increment, 
    language varchar(75) NOT NULL, 
    grouping varchar(15) NOT NULL, 
    p_order varchar(15) NOT NULL, 
    PRIMARY KEY (id, language) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=280 ; 
+0

Можете ли вы опубликовать план выполнения запроса для вышеуказанного запроса? – InSane 2010-12-06 07:35:28

+0

опубликуйте вывод `EXPLAIN` запроса, просто добавьте` EXPLAIN` в начало – 2010-12-06 07:55:39

ответ

2

Необходимо указать, что вы ищете Соответствие другим.

Так же, как в книге, номер страницы всех глав приведены в индексе, потому что читатели поиска по главе, аналогично для Mysql обрабатывать ваши запросы быстрее, вам нужно индексировать поля, которые будут совпадающие в WHERE состояние. Индексируйте поля, которые другие предложили здесь.

1

Вам нужно индексировать также grouping и p_order. Вы можете отменить индекс на language, если он не используется ни при каких условиях.

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

1
create index I_grouping_order on lang_list (grouping, p_order); 

Если вы хотите узнать подробности, посмотрите на http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html

Обратите внимание, что добавление двух отдельных индексов (один для grouping и один для p_order) не будет completelly сделать трюк, потому что вы используете оба поля в вашем запросе одновременно.