小编Jac*_*ket的帖子

检查 InnoDB 表是否已更改的最快方法

我的应用程序是非常数据库密集型的。目前,我正在运行 MySQL 5.5.19 并使用 MyISAM,但我正在迁移到 InnoDB。剩下的唯一问题是校验和性能。

我的应用程序CHECKSUM TABLE在高峰时间每秒执行大约 500-1000 条语句,因为客户端 GUI 不断轮询数据库以进行更改(它是一个监控系统,因此必须非常敏感且快速)。

使用 MyISAM,可以在表修改时预先计算实时校验和,并且速度非常快。但是,InnoDB 中没有这样的东西。所以,CHECKSUM TABLE很慢。

我希望能够检查表的最后更新时间,不幸的是,这在 InnoDB 中也不可用。我现在卡住了,因为测试表明应用程序的性能急剧下降。

更新表的代码行太多了,因此在应用程序中实现逻辑来记录表更改是不可能的。

是否有任何快速方法来检测 InnoDB 表中的变化?

mysql innodb performance

27
推荐指数
2
解决办法
6万
查看次数

MySQL 需要在大表和简单的 SELECT 上使用 FORCE INDEX

我们有一个应用程序,它将来自不同来源的文章存储在 MySQL 表中,并允许用户检索按日期排序的文章。文章总是按来源过滤,所以对于客户选择我们总是有

WHERE source_id IN (...,...) ORDER BY date DESC/ASC
Run Code Online (Sandbox Code Playgroud)

我们使用 IN,因为用户有很多订阅(有些有数千个)。

这是文章表的架构:

CREATE TABLE `articles` (
  `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  `source_id` INTEGER(11) UNSIGNED NOT NULL,
  `date` DOUBLE(16,6) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `source_id_date` (`source_id`, `date`),
  KEY `date` (`date`)
)ENGINE=InnoDB
AUTO_INCREMENT=1
CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'
COMMENT='';
Run Code Online (Sandbox Code Playgroud)

我们需要(日期)索引,因为有时我们在这个表上运行后台操作而不按源过滤。但是,用户不能这样做。

该表有大约 10 亿条记录(是的,我们正在考虑对未来进行分片......)。一个典型的查询如下所示:

SELECT a.id, a.date, s.name
FROM articles a FORCE INDEX (source_id_date)
     JOIN sources s ON s.id = a.source_id
WHERE a.source_id IN (1,2,3,...)
ORDER BY a.date DESC …
Run Code Online (Sandbox Code Playgroud)

mysql innodb index percona

8
推荐指数
1
解决办法
3万
查看次数

标签 统计

innodb ×2

mysql ×2

index ×1

percona ×1

performance ×1