在其中一个 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
子句之后放置索引字段更快....,但为什么呢?两者不一样吗?
最佳答案
假设表 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)。这将使视频中的搜索可能更加优化,尽管它仍然在很大程度上取决于数据。
关于mysql - MySQL SELECT 查询中的性能问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16165505/