我有一个带有1,000,000条记录的MySQL InnoDB表。这太多了吗?还是数据库可以处理更多呢?我之所以问是因为,我注意到有些查询(例如,从表中获取最后一行)在具有1密耳行的表中比在具有100密耳行的表中慢一些(秒)。
Answers:
我有一个带有1000000个寄存器的MySQL InnoDB表。这太多了吗?
不,1,000,000行(AKA记录)对于数据库来说不是太多。
我之所以问是因为我注意到,在具有100万个寄存器的表中,某些查询(例如,获取表的最后一个寄存器)的速度(以秒为单位)要比具有100个寄存器的表的查询(秒)慢。
该声明有很多要说明的地方。通常的嫌疑人是:
我的数据库有超过97,000,000条记录(30GB数据文件),并且没有问题。
只要记住定义和改进表索引即可。
因此,很明显1,000,000不是很多!(但是如果您不编制索引,是的,这是很多)
使用“解释”来检查您的查询,看看查询计划是否有问题。
EXPLAIN
-不管是不是新手。
EXPLAIN
;)
我认为这是一个普遍的误解-在数据库可伸缩性方面,大小只是方程式的一部分。还有其他一些困难(或更难解决)的问题:
工作集有多大(即需要将多少数据加载到内存中并进行有效处理)。如果您只是插入数据,然后不执行任何操作,则实际上这是一个容易解决的问题。
需要什么级别的并发?是只有一个用户在插入/读取数据,还是我们有成千上万的客户端同时运行?
需要什么级别的承诺/耐久性和性能一致性?我们是否必须确保我们能够兑现每次承诺。如果平均交易速度快,还是可以确保所有交易速度都快(六个sigma质量控制,例如-http: //www.mysqlperformanceblog.com/2010/06/07/performance-optimization-和6-sigma /)。
您是否需要执行任何操作问题,例如更改表架构?在InnoDB中,这是可能的,但是却非常慢,因为它通常必须在前台创建一个临时表(阻止所有连接)。
因此,我要说明的两个限制问题将是:
寄存器?你是说记录吗?
如今,一百万条记录对于数据库而言并不是什么大不了的事情。如果遇到任何问题,很可能不是数据库系统本身,而是运行它的硬件。在您用尽所有硬件来抛出它之前,您不会遇到数据库问题。
现在,显然某些查询要比其他查询慢,但是如果两个非常相似的查询在截然不同的时间运行,则需要找出数据库的执行计划并对其进行优化,即使用正确的索引,适当的规范化等。
顺便说一句,从逻辑上看,它们没有固有的顺序,因此在表中没有“最后”记录之类的东西。
SELECT LAST_INSERT_ID()
代替该查询。