mysql查询运行缓慢
问题描述:
有没有办法加快这个查询。它的加载速度很慢,大约有279条记录。我已将数据中的语言& id字段编入索引。还有什么我可以做的吗?mysql查询运行缓慢
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 ;
答
你需要索引你正在与 匹配的内容。
就像一本书,所有的章节页码在索引中给出因为读者按章节搜索,同样对于MySQL处理您的查询速度更快,需要指数将在那里待匹配字段条件。索引其他人在此提出的字段。
答
你需要指数也grouping
和p_order
。如果没有在任何条件下使用,您可以删除索引language
。
请发布表格模式以供进一步调查,以及一些示例数据。
答
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做的伎俩在你的查询中同时进行。
您可以发布上述查询的查询执行计划吗? – InSane 2010-12-06 07:35:28
发布查询的`EXPLAIN`输出,只需将`EXPLAIN`添加到开头 – 2010-12-06 07:55:39