mysql - 通过索引中列的顺序优化查询

标签 mysql sql database indexing

我有一个包含域和 ID 的表 查询是

    select distinct domain 
    from user 
    where id = '1'

索引使用的顺序 idx_domain_ididx_id_domain

如果执行顺序是

(FROM clause,WHERE clause,GROUP BY clause,HAVING clause,SELECT clause,ORDER BY clause)

那么如果查询使用排序的 where 列比 select 列查询应该更快。

该表有 460 万行。

使用 idx_domain_id 的时间 time using idx_domain_id

更改顺序后的时间 time after change the order

最佳答案

这是您的查询:

select distinct first_name 
from user 
where id = '1';

您观察到 user(first_name, id)user(id, firstname) 快。

为什么会这样?首先,这可能只是您计时方式的人工产物。如果您的表真的很小(即数据适合单个数据页),那么索引对于提高性能通常不是很有用。

其次,如果您只运行一次查询,那么在您第一次运行查询时,您可能会有一个“冷缓存”。第二次,数据已经存储在内存中,所以运行速度更快。

其他问题也可能出现。您没有指定时间安排。微小的差异可能是由于噪声造成的,可能没有意义。

您没有提供足够的信息来给出更明确的解释。这将包括:

  • 在冷缓存上重复计时。
  • 表的大小信息和匹配行数。
  • 布局信息,尤其是 id 的类型。
  • 解释这两个查询的计划。

关于mysql - 通过索引中列的顺序优化查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54215529/

相关文章:

php - 是否可以将完整记录(整行)连接到 MySQL 中的一列中?如何?

MySQL:表 1 中的 SELECT 字段不存在于表 2 中

database - 存储在数据库中的图像在浏览器上显示时被剪切/裁剪

PHP:从简单的 html 表单向 MySQL 插入数据

Go 中的数据库继承

Php/mySQL 连接到远程服务器, fatal error ,连接超时

php - Laravel Multi-Tenancy 迁移

MySQL - 使用键分区时数据在分区中的分布不均匀

用于多列的 SQL UNPIVOT

mysql - 从多个表中查询行