gpt4 book ai didi

mysql - 如何优化我的查询以更快地运行?

转载 作者:行者123 更新时间:2023-12-01 00:01:26 24 4
gpt4 key购买 nike

用户表有

id, email, password, gender, dob 

等性别默认为空。我有另一个表 user_gender,其中包含 first_namegender。我的 sql 查询是从 User 获取用户并根据 first_nameUser_Gender 中选择性别。用户表很大,大约有 300,000 多行。我正在运行下面提到的查询,但它花费了太多时间。我该如何优化这个查询?-

select 
count(*)
from user u
left outer join user_gender ug on ug.name =
case when locate(' ', u.name) > 0 then
substring(u.name, 1,locate(' ', u.name))
else
u.name
end
where
ug.gender != 'mf' and u.gender is null

最佳答案

首先我建议彻底重组。 300000 行开始达到“中等数据集”大小...

  • > normalize正确地表
    • 不要使用存储多个单独值的列 - 特别是名称列是一个很好的例子,不要这样做。让它成为两列:first_name 和 last_name。
    • DavidB 提到了性别分离。这完全是胡说八道。至少,每个人都有一个性别……是未知的,它总是可以是NULL……
  • 使用(最好是数字!!)ID,而不是使用数据字段(特别是那些像名字一样的)
    • 这样,如果名称被更改(这可能发生在 IRL),您只需更新一行...
    • 两个人甚至可能有完全相同的名字...

其次重组后,你要应用索引,check your queries' execution plans确保适本地优化它们。

关于mysql - 如何优化我的查询以更快地运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15137009/

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