首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在MySQL表上添加索引会显着地减慢它的速度,而在Server和PostgreSQL上却会慢下来

为什么在MySQL表上添加索引会显着地减慢它的速度,而在Server和PostgreSQL上却会慢下来
EN

Database Administration用户
提问于 2017-11-19 04:21:29
回答 1查看 7.4K关注 0票数 2

版本MySQL 5.7.2

我正在处理带有int列的虚拟数据。

时间:1-10毫米

产品:70000个随机ints,另有30000个来自70000个被骗

数量:范围从500-1000

价格:范围从10-50,但价格保持在1-5的差异范围内的每一个产品行数据。

通过随机选择产品并生成所需的行数据,可以创建10 by行。

运行一个范围查询,比如..。

代码语言:javascript
复制
select * from productdata where product >= 1500 and product <= 2000

大约需要4秒。

当我在产品上添加一个索引时.

代码语言:javascript
复制
create index productindex on productdata(product)

查询现在大约需要30秒。时间是表中唯一唯一的列,但将其设置为主键也没有帮助。

在Server和PostgreSQL上,我没有看到使用每个非聚集索引的相同数据和查询的相同问题。我只有编写SQL Server查询的经验,所以对此有点困惑。我还尝试过使用PostgreSQL来比较另一个数据库。

所有数据库都是最新的稳定版本。

操作输出(由于原始查询花费的时间太长,我不得不缩小范围).

没有索引..。

用索引。

桌子状态..。

缓冲..。

解释选择..。

显示创建表..。

代码语言:javascript
复制
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

把时间和产品作为关键..。

EN

回答 1

Database Administration用户

发布于 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

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/191243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档