gpt4 book ai didi

mysql - 让简单的 SQL 查询更快

转载 作者:太空宇宙 更新时间:2023-11-03 12:09:46 25 4
gpt4 key购买 nike

我发现同一个查询一次又一次地记录在我的慢日志中,但我真的不知道如何让它更快。我相信我做了大部分可能的优化。查询如下:

SELECT merk_id FROM profile_merk WHERE profile_id = '51485e0d9ce6d'

当然,profile_id 随每个查询而变化。该表有大约 4000 万行和 2 列。一列是 merk_id,另一列是 profile_id。我在表上有以下索引:

Tbl | Non_unique | Key_name | Seq_in_index | Column_name | Collation| Cardinality | Sub_part    
profile_merk | 0 | PRIMARY | 1 | merk_id | A | 4125 | NULL | NULL | BTREE
profile_merk | 0 | PRIMARY | 2 | profile_id | A | 39101247 | NULL | NULL | BTREE
profile_merk | 1 | profile_id | 1 | profile_id | A| 131212 | NULL | NULL | BTREE
profile_merk | 1 | merk_id | 1 | merk_id | A | 4125 | NULL | NULL | BTREE

查询的解释语句如下:

id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra    
1 | SIMPLE | profile_merk | ref | profile_id | profile_id | 62 | const | 1688 | Using where

我还能做些什么来优化性能?我意识到这是一个悬而未决的问题,但我们将不胜感激任何帮助!

最佳答案

对于这个简单的查询:

SELECT merk_id
FROM profile_merk
WHERE profile_id = '51485e0d9ce6d';

最佳性能是使用复合键:

create index idx_profilemark_profileid_merkid on profile_mark(profile_id, merk_id)

主键的问题在于两列的顺序不符合该查询所需的顺序。 profile_mark(profile_id, merk_id)profile_mark(merk_id, profile_id) 上的索引有很大区别。本质上,索引将从左到右使用,where 子句首先有机会使用索引列。

关于mysql - 让简单的 SQL 查询更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24863435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com