MisskeyのDBってローカルの場合にはuserHostがNullになってるんだよね。
インデックスの中にNullが入るとIS NULLやNOT NULLの検索時にインデックスが使われずに性能が落ちる場合があるのよね。
ローカルだけ検索遅いのこの影響では???
MisskeyのDBってローカルの場合にはuserHostがNullになってるんだよね。
インデックスの中にNullが入るとIS NULLやNOT NULLの検索時にインデックスが使われずに性能が落ちる場合があるのよね。
ローカルだけ検索遅いのこの影響では???
EXPLAINでコストを見てみたらIS NULLのコストはIS NOT NULLより高いことがわかる。
EXPLAIN
SELECT * FROM public.note
WHERE "userHost" IS NULL
ORDER BY id DESC LIMIT 100
--Limit (cost=0.56..6554.39 rows=100 width=1126)
EXPLAIN
SELECT * FROM public.note
WHERE "userHost" IS NOT NULL
ORDER BY id DESC LIMIT 100
--Limit (cost=0.56..22.92 rows=100 width=1126)
ホスト指定した場合のもついでに載せとく
EXPLAIN
SELECT * FROM public.note
WHERE "userHost" = 'misskey.io'
ORDER BY id DESC LIMIT 100
--Limit (cost=0.56..262.27 rows=100 width=1126)
この部分改善してインデックスが効くようにできれば改善する気がする🤔
と思ったがインデックスは使ってるっぽいな。。
ただコストが高いだけ・・・・
Limit (cost=0.56..6554.39 rows=100 width=1126)
-> Index Scan Backward using "PK_96d0c172a4fba276b1bbed43058" on note (cost=0.56..10843823.65 rows=165458 width=1126)
Filter: ("userHost" IS NULL)
違う違う
このインデックスはプライマリキーだからuserHost関係ない;;
@ranpei@mstdn-jp.site パーシャルインデックス効かせるとはやくなりますよ
RE: https://misskey-square.net/notes/9iqbtdhboh
@yuriha 有益な情報ありがとうございます。
自分でもインデックスいじってたもののなかなか改善せずに困っておりました。
結局userHost = NULLのデータが足かせだったね。
GNU social JP is a social network, courtesy of GNU social JP管理人. It runs on GNU social, version 2.0.2-dev, available under the GNU Affero General Public License.
All GNU social JP content and data are available under the Creative Commons Attribution 3.0 license.