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
更新之間插入的用戶名;第三部分是一種後備方法,它只在前兩步找不到任何東西時才進行正常搜索(如果用戶更改了用戶名,則可能會發生這種情況)。
如果用戶名永不改變,則應該省略第三步。
「可搜索管理員」意味着「可以通過管理員搜索」或「能夠找到具有管理員身份的用戶名」? – Quassnoi 2010-12-22 15:03:28
您是否檢查刪除此索引是否增加(顯着)您的寫入性能? – Mchl 2010-12-22 15:06:27