gpt4 book ai didi

sql - 有选择地减少数据库索引的策略

转载 作者:行者123 更新时间:2023-11-29 05:43:38 25 4
gpt4 key购买 nike

我有一个索引字段 users.username,它只在管理界面中使用。因为该表当前有很多写入,所以我想删除该索引。当然,我想让管理员可以搜索索引。

我可以提取整列,将该索引移动到另一个表。但这感觉很愚蠢,因为我已经计划将写入繁重的字段移动到另一个表中(只有一个索引)。

加入搜索引擎就太过分了。

有什么简单的解决方案吗?

[编辑]我刚刚意识到管理员搜索和排序大量字段的需求对许多表产生了影响(实际上需要更多的索引)。第一步,我将确保管理员获得专用服务器+数据库,以防止来自实时服务器的缓慢排序/搜索,从长远来看,我将调查搜索引擎是否合适。谢谢大家!

最佳答案

MySQL 不支持维护一个只能由某些用户访问的索引,即使支持,它的成本也与维护普通索引一样昂贵。

假设用户名是唯一的,您可以像这样创建一个单独的类似索引的表:

CREATE TABLE shadow_username (username VARCHAR(100) NOT NULL PRIMARY KEY, userid INT NOT NULL, UNIQUE (userid))

、及时填写:

TRUNCATE
shadow_username

INSERT
INTO shadow_username
SELECT username, id
FROM users

并查询:

SELECT  u.*
FROM (
SELECT id
FROM shadow_username
WHERE username = 'user'
) s
JOIN users u
ON u.id = s.id
UNION ALL
SELECT u.*
FROM users
WHERE id >
(
SELECT MAX(id)
FROM shadow_username
)
AND username = 'user'
UNION ALL
SELECT *
FROM users
WHERE username = 'user'
LIMIT 1

第一部分进行正常搜索;第二部分处理在 shadow_username 更新之间插入的用户名;第三部分是后备方法,仅当前两个步骤未找到任何内容时才进行正常搜索(如果用户更改了用户名,则可能会发生这种情况)。

如果用户名永不更改,则应省略第三步。

关于sql - 有选择地减少数据库索引的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4510415/

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