首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何以最优化的方式执行这个简单的查询? MYSQL和MARIADB。

问如何以最优化的方式执行这个简单的查询? MYSQL和MARIADB。
EN

Database Administration用户
提问于 2019-03-24 18:41:05
回答 1查看 44关注 0票数 -2
代码语言:javascript
复制
pkid clientname location    
1   Jones   NY  
2   Jones   NJ  
3   Jones   TX  
4   Jones   FL  
5   Jones   IA  
6   Jones   NC  
7   Jones   SC  
8   Jones   VA  
9   Smith   FL  
10  Smith   CO  
11  Smith   NJ  
12  Smith   ME  

我想找到什么客户(琼斯或史密斯)的位置,纽约,NJ和NC,并有琼斯的输出。

如果我使用in子句,则查询将从表中选择clientname ('NY‘、'NJ’、'NC')中的位置,但in子句充当"OR“和I需要a " and”。

EN

回答 1

Database Administration用户

发布于 2019-04-16 18:21:05

代码语言:javascript
复制
INDEX(location, clientname)  -- This is part of the optimization

SELECT clientname
    FROM tbl
    WHERE location IN ('NY', 'NJ', 'NC')
    GROUP BY clientname
    HAVING COUNT(*) = 3

(如果可以有多行,则更改为COUNT(DISTINCT location)。)

请注意,索引是

  • “合成”
  • 按“右”顺序(先处理WHERE )
  • “覆盖”(索引中包含所有必要的列)

是最优的吗?我不知道。它的性能将取决于mysql/mariadb的版本--在这方面已经有了改进。在一个类似查询的实验中,它只读取3‘位置的行(索引),而不是整个索引。我使用了讨论过的这里技术来发现读取的行数。

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

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

复制
相关文章

相似问题

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