有没有办法加快这个查询。它的加载速度慢,约有279条记录。我已将语言与索引编入索引数据中的id字段。还有什么我可以做的吗?
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 :(得分:2)
您需要为自己编制索引 匹配。
就像书中一样,所有章节的页码都在索引中给出,因为读者按章节搜索,类似于Mysql更快地处理你的查询,你需要索引将在where条件中匹配的字段。索引其他人在此建议的字段。
答案 1 :(得分:1)
您还需要为grouping
和p_order
编制索引。如果没有被任何where条件使用,你可以在language
上删除索引。
请发布表格架构以供进一步调查,并提供一些示例数据。
答案 2 :(得分: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
)将无法完成,因为您在查询中同时使用这两个字段。
答案 3 :(得分:0)
尝试分组和p顺序的复合索引。详细了解group by optimization