我有一个包含200万行的表,一个“通道”列和一个“时间”列。
我有关于频道和时间的单独索引,以及关于频道+时间的综合索引。
这是瞬间的:
$fileObject = json_decode($app->request->getBody());
$data = implode(array_map('chr', $fileObject->fileBytes));
file_put_contents('/tmp/' . $fileObject->filename, $data);
但这需要12-15秒:
select * from table where channel = 5 order by time desc limit 10
解释说组合索引用于两者,但区别在于在第二个上调用filesort(我假设在两个选择之间进行合并排序)
有没有一种很好的方法来加快速度,或者我应该做两次选择并稍后合并结果? (因为几乎所有东西都可以合并 - 这些天在不到15秒的时间内排序10件物品)
答案 0 :(得分:0)
关系数据库,尤其是mysql,因缺乏对{em> {/ 1>}的两个方面的索引访问而缺乏优化而臭名昭着。
在这种情况下,您可以使用OR
提供将使用索引的单个表达式:
IN (...)
即使逻辑上它返回完全相同的数据,mysql也会在编码为select * from table
where channel in (4, 5)
order by time desc
limit 10
时使用这两个值的索引,但如果编码为{{}则会赢得&#t; 1}}。