首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何找到mysql将用于查询的键?

如何找到mysql将用于查询的键?
EN

Database Administration用户
提问于 2016-03-17 17:21:44
回答 1查看 35关注 0票数 2

我刚遇到一个查询,遇到了一个死锁,它试图获取的锁是用于索引的。但是,当我使用explain可视化查询时,我发现key和possible_key下面列出了一个不同的索引。回到查询时,我发现导致死锁的键只在order子句中使用的列上,而在查询中没有使用其他地方。

这让我思考:给定一个任意的SQL语句,如何找到mysql需要获得一个锁才能运行的所有索引?

EN

回答 1

Database Administration用户

发布于 2016-03-20 18:55:57

你是从错误的方向来的。任何查询都可以随时死锁。因此,当死锁发生时,您必须准备重播整个事务。

当然,尽量避免死锁是个好主意,有几件事情可以降低死锁的频率。主要技术是使查询速度更快。

在前面提到的情况下,优化器可能会认为避免ORDER BY的“排序”比使用任何其他索引更好,甚至不使用索引。让我们看看SHOW CREATE TABLEEXPLAIN SELECT来进一步剖析所发生的事情。

另一种技术是包含最优索引--通常是多列上的“复合”索引。有时,有一个“覆盖”索引(包括查询中提到的所有列)甚至是好的。

在使用IN时,另一种技术是对值进行排序。

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

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

复制
相关文章

相似问题

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