gpt4 book ai didi

mysql - 查询解析 34k 条记录中的 16k 条记录

转载 作者:行者123 更新时间:2023-11-29 02:26:14 26 4
gpt4 key购买 nike

User 表有大约 34k 条记录。

我正在触发这个查询-

SELECT user_pid, user_fname, user_lname, user_uname, user_mobno, user_email, user_date,
user_userid, user_type, user_status
FROM User
WHERE ((lower(user_fname) like'%all%'
OR lower(user_fname) like'%that%')
OR (lower(user_lname) like'%all%'
OR lower(user_fname) like'%that%'))
AND user_status!=3
AND user_type != 1
LIMIT 20;

解释结果是-

+----+-------------+---------+-------+---------------+-------+---------+------+-------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------+-------+---------------+-------+---------+------+-------+-------------+
| 1 | SIMPLE | User | range | users | users | 4 | NULL | 16967 | Using where |
+----+-------------+---------+-------+---------------+-------+---------+------+-------+-------------+

表格索引-

用户(用户类型,用户状态)

我应该在哪里添加索引以加快此查询?

最佳答案

这是您的查询

SELECT user_pid, user_fname, user_lname, user_uname, user_mobno, 
user_email, user_date, user_userid, user_type, user_status
FROM User
WHERE ((lower(user_fname) like'%all%' or lower(user_fname) like '%that%') or
(lower(user_lname) like'%all%' or lower(user_fname) like '%that%' )
) and user_status!=3 and user_type != 1
limit 20;

首先,仅根据匹配结果的大小,34k 中的 16k,索引可能无法帮助您。

让我进一步说明。您的 like 子句是完整的通配符搜索。常规索引可用于like,但仅当模式以非通配符开头时。您的所有模式都以 % 开头,因此常规索引无法工作。

您的比较是不相等的比较。再一次,索引很少用于这些。索引最适用于等式谓词。

我能预见的唯一索引方案是名称字段user_fnameuser_lname 上的全文索引。我不确定这是否有助于提高性能,但您可以试试。

关于mysql - 查询解析 34k 条记录中的 16k 条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21235347/

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