我有一个大约有530,000行的数据库,每天增加约5,000 - 10,000行。
目前,我已经运行了这个查询,并且需要大约1.1到1.8秒才能完成,这没关系,但查询正在运行6次,这确实会减慢页面加载速度。
$q = mysqli_query($link, "SELECT `col1`, `col2`, `col3`, `col4`, `col5` FROM `table` WHERE `col6`='".$_SESSION['name']."' AND `col7`=".$i."");
$ i是从1开始的常数增加 - > 6。
没有分区,只是因为我真的不确定该怎么做。
col1 - VARCHAR 255 INDEX
col2 - VARCHAR 3
col3 - INT 11 INDEX
col4 - INT 11 INDEX
col5 - INT 11
col6 - VARCHAR 255 INDEX
col7 - INT 1
如果需要更多信息,我可以提供。
如果有人对如何加快查询提出任何建议,那就太棒了。
谢谢。
答案 0 :(得分:5)
运行一次查询,但在order by
col7
SELECT `col1`, `col2`, `col3`, `col4`, `col5`
FROM `table`
WHERE `col6`='session_name'
ORDER BY `col7`
就个人而言,我只会索引col6
,因为它是此查询中用于查找的主过滤器列。所需的任何其他索引将取决于表的其他用途,以及col
是您的PK。
col7
上的索引几乎是多余的,因为它只有6个可能的值 - 它会在原始问题的$i
循环迭代中替换for
。
假设结果集每个col7
值只提供1行,那么5 columns * 6 rows
会使数据库的内存排序非常小。
请参阅下面的讨论,了解更多索引选项。