MySql 性能问题与 SQL-Server

Posted

技术标签:

【中文标题】MySql 性能问题与 SQL-Server【英文标题】:MySql Performance issue vs SQL-Server 【发布时间】:2015-04-08 16:17:56 【问题描述】:

我在 MSSQLServer 2008R2 和 mysql WorkBench 6.1 上创建了一个包含 5000 万行的表。

我不确定为什么这个查询在 MySql 上需要 16 秒,而在 SQL-Server 上需要 0 秒?

SELECT  avg(speed) FROM tm where RoadId%5=0 and time%3=0;

-不同的where子句存在性能差异。

-SQL-Server 和 MySQL 都安装在一台具有 128 GB 内存和 16 核 CPU 的机器上。

ps:这是在 SQL-Server 上创建表的脚本

CREATE TABLE [dbo].[TM](
    [RoadId] [int] NOT NULL,
    [Date] [smallint] NOT NULL,
    [Time] [tinyint] NOT NULL,
    [VType] [tinyint] NOT NULL,
    [Speed] [tinyint] NOT NULL,
 CONSTRAINT [PK_TM_1] PRIMARY KEY CLUSTERED 
(
    [RoadId] ASC,
    [Date] ASC,
    [Time] ASC,
    [VType] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

和 MySQL:

CREATE TABLE `tm` (
  `RoadId` int(11) NOT NULL,
  `Date` smallint(6) NOT NULL,
  `Time` tinyint(3) unsigned NOT NULL,
  `VType` tinyint(3) unsigned NOT NULL,
  `Speed` tinyint(3) unsigned NOT NULL,
  PRIMARY KEY (`RoadId`,`Date`,`Time`,`VType`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

【问题讨论】:

嗯,这些是完全不同的产品,很可能它们都没有针对搜索模数进行优化,坦率地说,这听起来很假,而不是真实的情况。 @JamesZ 感谢您的回复,这是一个有 500-10 亿行的真实表格。 如果您需要大量取模,最好将其计算到表格中,而不是在搜索中进行。 @JamesZ where 子句可以是任何东西,所以我无法将它们计算到表格中。 您是否有足够的 RAM 来缓存整个数据集?如果不是,那么这个测试就是假的,因为它被缓存了。 【参考方案1】:

SQL Server 自动为这种类型的查询实现并行性,而 mysql 没有。这基本上意味着 SQL 将划分表扫描并使用多个线程分析行。我相信mysql需要对数据进行分区才能实现同样的功能。

【讨论】:

不过,0 秒听起来很可疑。即使已分区,MySQL 也不会并行执行此查询。

以上是关于MySql 性能问题与 SQL-Server的主要内容,如果未能解决你的问题,请参考以下文章

「高并发秒杀」来自大厂面试官的MySQL灵魂十连问

面试中常问:mysql数据库做哪些优化也提高mysql性能

MySQL SELECT 查询中的性能问题?

Jmeter MySQL数据库性能测试

mysql开发实战8问

MySQL 开发实践 8 问,你能 hold 住几个?