MySQL SELECT 查询中的性能问题?

Posted

技术标签:

【中文标题】MySQL SELECT 查询中的性能问题?【英文标题】:Performance issues in MySQL SELECT queries? 【发布时间】:2013-04-23 09:16:21 【问题描述】:

在其中一个 Facebook 群组中,有人问了一个问题:

假设我们有 2 个查询。

SELECT * FROM video WHERE video_id='45f54' AND video_type='youtube';

SELECT * FROM video WHERE video_type='youtube' AND video_id='45f54'

video_id 是一个索引字段。

这两个查询的性能有什么不同吗?

有人回答在WHERE 子句之后放置索引字段更快....,但为什么呢?两者不一样吗?

【问题讨论】:

嘿伙计,你可以在这里找到一个很好的解释你的问题:***.com/questions/1252279/mysql-indices-and-order 但它被称为最左边的索引。 MYSQL 中的解析器是如何工作的。始终尝试保持 WHERE 子句中的列与索引匹配。 【参考方案1】:

假设表 video 是相同的,那么这两个查询实际上是相同的,因为 MySQL 优化器将在内部处理 WHERE 条件。这里有几个类似问题的链接

Does the order of columns in a query matter? https://dba.stackexchange.com/questions/1792/in-mysql-does-the-order-of-the-columns-in-a-where-clause-affect-query-performan

对于优化,您可能希望考虑以下(如果尚未完成)

将 video_type 更改为 ENUM(),甚至是通过 INTEGER 链接的单独表 对 video_type 进行更改后的 (video_type,video_id) 上的索引。 限制 video_id 的长度,即 CHAR(5),如果它们总是 5 个字符长

我个人会创建一个新表“video_types”(videotypeID SMALLINT UNSIGNED AUTO_INCREMENT,videotype VARCHAR)。这将允许视频中的搜索潜在地更加优化,尽管它仍然严重依赖于数据。

【讨论】:

据我所知,是的,完全相同。这是另一个具有相同答案的网站上的另一个问题,dba.stackexchange.com/questions/1792/… 和 ***.com/questions/4582331/…

以上是关于MySQL SELECT 查询中的性能问题?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL---查询性能优化

提高 MySQL 中的 count() 性能

在 mysql 查询中的 SELECT 中使用 SELECT

多个和单个索引

Mysql查询性能(2个查询之间的差异)[重复]

MYSQL数据库性能调优之三:explain分析慢查询