我确定执行时间与MySQL查询中的行数成正比。我的问题是,比例是多少?随着数据库变大或只有一点点,查询的执行时间会显着增加吗?
有关此主题的任何信息将不胜感激
答案 0 :(得分:2)
不,不是真的。
select * from table
将按比例延长(如果您有很多行,对于只有四行的表,它不会花费两倍于具有两行的表的时间,这将由“固定成本”支配) )
select * from table limit 10
将占用相同的时间,无论表格大小如何。
无论表大小如何,select count(*) from table
在MySQL上都是即时的。
select * from table where primary_key = ?
将以对数方式进行缩放(因为使用了B树索引)。
select count(*) from table where non_indexed_column = ?
会按比例延长,但select count(*) from table where indexed_column = ?
则不会。
如果行数增加一倍,select * from table_a join table_b
将花费四倍的时间。 select * from table_a join table_b using (column_a = indexed_column_b)
应该线性缩放。
如果行数增加一倍,select * from table_a order by unindexed_column
将花费两倍以上的时间。 select * from table_a order by indexed_column
可按比例缩放,但select * from table_a where something = ? order by indexed_column
可能不会缩放。
一旦表格不再适合内存,所有操作都会花费更多时间。或者,如果在将内存用于其他表时运行查询。这可能是一个真正的墙壁,执行时间突然通过屋顶。
此外,您正在查看“查询中的行”(选定的行)和“表中的行”。这两者都有影响。表中已删除行的“存在”也会产生影响。
答案 1 :(得分:0)
SELECT查询执行时间的最大因素是它们是需要完整扫描数据库还是可以使用索引。对于前一种情况,执行时间随着数据库的增长而增长。对于后者,它没有(至少没有显着)。
答案 2 :(得分:0)
执行时间与行数和列数成正比,您必须将索引键放在列中,从您构建查询的列开始,这将快速运行更多次!