版本MySQL 5.7.2
我正在处理带有int列的虚拟数据。
时间:1-10毫米
产品:70000个随机ints,另有30000个来自70000个被骗
数量:范围从500-1000
价格:范围从10-50,但价格保持在1-5的差异范围内的每一个产品行数据。
通过随机选择产品并生成所需的行数据,可以创建10 by行。
运行一个范围查询,比如..。
select * from productdata where product >= 1500 and product <= 2000大约需要4秒。
当我在产品上添加一个索引时.
create index productindex on productdata(product)查询现在大约需要30秒。时间是表中唯一唯一的列,但将其设置为主键也没有帮助。
在Server和PostgreSQL上,我没有看到使用每个非聚集索引的相同数据和查询的相同问题。我只有编写SQL Server查询的经验,所以对此有点困惑。我还尝试过使用PostgreSQL来比较另一个数据库。
所有数据库都是最新的稳定版本。
操作输出(由于原始查询花费的时间太长,我不得不缩小范围).

没有索引..。

用索引。

桌子状态..。

缓冲..。

解释选择..。

显示创建表..。
CREATE TABLE `products` (
`time` int(11) DEFAULT NULL,
`product` int(11) DEFAULT NULL,
`quantity` int(11) DEFAULT NULL,
`price` int(11) DEFAULT NULL,
KEY `productindex` (`product`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8把时间和产品作为关键..。

发布于 2017-11-22 08:44:48
缓冲池很小,设置更大的值。
SELECT @@innodb_buffer_pool_size; SET GLOBAL innodb_buffer_pool_size=402653184; SELECT @@innodb_buffer_pool_size; select * from productdata where product >= 1500 and product <= 2000
https://dba.stackexchange.com/questions/191243
复制相似问题