"fast-moving"小表上的 mysql 索引性能

标签 mysql performance indexing

我们有一个用作队列的表。条目不断地被添加、不断地更新,然后被删除。尽管我们可能每秒添加 3 个条目,但表的数量永远不会超过几百行。

为了从表中获取条目,我们进行了一个简单的选择。

SELECT * FROM queue_table WHERE some_id = ?

我们正在讨论在 some_id 上添加索引。我认为我们添加和删除行的小尺寸和速度会说不,但按照惯例,我们似乎应该有一个索引。

有什么想法吗?

最佳答案

如果您使用InnoDB(您应该拥有此类表)并且该表是并发访问的,那么您绝对应该创建索引。

执行DML操作时,InnoDB会锁定它扫描的所有行,而不仅仅是那些与WHERE子句条件匹配的行。

这意味着没有索引,查询如下:

DELETE
FROM    mytable
WHERE   some_id = ?

必须进行全表扫描并锁定所有行。

这会杀死所有并发(即使线程访问不同的 some_id,它们仍然必须互相等待),甚至可能导致死锁。

每秒 3 笔交易,没有索引应该是问题,所以只需创建它即可。

关于 "fast-moving"小表上的 mysql 索引性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2095918/

相关文章:

javascript - 钻石方形算法固定大小

javascript - 有什么方法可以更改数组元素索引,使其从 1, 2, 3, 4 而不是 0, 1 ,2, 3 开始?

algorithm - 关于空间索引的好书/文章

jQuery 更复杂的选择器 vs. 每个元素处理

mysql - sphinx 建筑指数改善

php - 可以使用在同一页面上的表单中选择的值来填充 php/mysql 调用吗?

mysql - 使用减号插入mysql时出现语法错误

mysql - nodejs 上的同步功能到 MySQL

mysql - 合并具有不同列数的两个查询

php - 如何用 PHP 压缩 XML?