misskey-dev / misskey

🌎 A completely free and open interplanetary microblogging platform 🚀
https://misskey-hub.net/
GNU Affero General Public License v3.0
10.08k stars 1.38k forks source link

Node.jsやめる(Rustにする?) #11078

Open syuilo opened 1 year ago

syuilo commented 1 year ago

Summary

Node.jsはパフォーマンス上の問題があるため

Goとかでもいいけど

EbiseLutica commented 1 year ago

個人的にはRustよりGoのほうがまだ読み書きしやすいのでGoを推したい

tamaina commented 1 year ago

GoはGoogle製なので将来性が心配

EbiseLutica commented 1 year ago

なんならBunとかに置き換えるだけでもローコストで早くなったりしないのかな

MineCake147E commented 1 year ago

Rustもどうやら開発コミュニティでn悶着あるみたいですので、個人的にはC# (ASP.NET Core 7.0)が良いかと思います。

sim1222 commented 1 year ago

bunのfetchとBun.serveに置き換えると速度がだいぶ向上する気はしますが、Crypto周りのNode互換APIがまだ未実装なのでそこだけなんとかすれば動く気はします(node-forgeなどに頼る?)

EbiseLutica commented 1 year ago

Node.jsのどの側面がMisskeyを遅くしているのか、そもそも本当にMisskeyが遅い原因がNode.jsなのかなどのプロファイリングをしないと、技術選定の裏付けが難しいかも

tamaina commented 1 year ago

Rustにするのは俺がRustを覚える必要があるのでやめて欲しい(などと)

chocolate-pie commented 1 year ago

パフォーマンスのことを考えるとRustを推したいです。Goの方が読みやすいとありますが、Rustが独自のルールを導入しているだけで、慣れてくるとそんなんでも。

argxentakato commented 1 year ago

Rustにするのは俺がRustを覚える必要があるのでやめて欲しい(などと)

Denoを使えばNode.jsのエコシステムを使い回せるのでお得ではないかと。 速度を求めると結局Rustが出てくるけどな!

どちらにせよ、現在のプロジェクト構造を180°ひっくり返すようなものなので「本当にNode.jsが原因かどうか」を精査する必要はあるかと。

u1-liquid commented 1 year ago

Rustはサーバー用度にはあまり使いたくないかも 本当にNodeを捨てるならGoやC#にするのが妥当かと

単純に一部で処理速度がほしいってことならNodeのままでC++などでaddonを作ったほうがいいかもしれない

acid-chicken commented 1 year ago

Rust に一票

acid-chicken commented 1 year ago

単純に一部で処理速度がほしいってことならNodeのままでC++などでaddonを作ったほうがいいかもしれない

ちなみにそれはもう Rust でやってる

acid-chicken commented 1 year ago

あと別に Go はパフォーマンス思考の言語では全然ないので意味がない

nyanrus commented 1 year ago

Denoを使えばNode.jsのエコシステムを使い回せるのでお得ではないかと。 速度を求めると結局Rustが出てくるけどな!

ついでにパフォーマンスが必要ならwasm, もっと行くならffi(ただしunstable)でOK 純Rustの場合、async runtimeなど独自の実装の学習が必要なので、メインはTypescriptを維持したほうがいいと思います。

tamaina commented 1 year ago

必要に応じてRustで作ったNodeのネイティブモジュールを読み込む今の方針でいいと思うんだけどなぁ

fruitriin commented 1 year ago

それよりN+1のほうがボトルネックだと思う Slow Query Logがすごい

fruitriin commented 1 year ago

Slow Query Log いる?

fruitriin commented 1 year ago

userid | dbid | toplevel | queryid | query | plans | total_plan_time | min_plan_time | max_plan_time | mean_plan_time | stddev_plan_time | calls | total_exec_time | min_exec_time | max_exec_time | mean_exec_time | stddev_exec_time | rows | shared_blks_hit | shared_blks_read | shared_blks_dirtied | shared_blks_written | local_blks_hit | local_blks_read | local_blks_dirtied | local_blks_written | temp_blks_read | temp_blks_written | blk_read_time | blk_write_time | temp_blk_read_time | temp_blk_write_time | wal_records | wal_fpi | wal_bytes | jit_functions | jit_generation_time | jit_inlining_count | jit_inlining_time | jit_optimization_count | jit_optimization_time | jit_emission_count | jit_emission_time
-- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | --
16822 | 16426 | TRUE | -5599249229748355469 | SELECT DISTINCT "distinctAlias"."note_id" AS "ids_note_id", "distinctAlias"."note_id" FROM (SELECT "note"."id" AS "note_id", "note"."createdAt" AS "note_createdAt", "note"."replyId" AS "note_replyId", "note"."renoteId" AS "note_renoteId", "note"."threadId" AS "note_threadId", "note"."text" AS "note_text", "note"."name" AS "note_name", "note"."cw" AS "note_cw", "note"."userId" AS "note_userId", "note"."localOnly" AS "note_localOnly", "note"."reactionAcceptance" AS "note_reactionAcceptance", "note"."renoteCount" AS "note_renoteCount", "note"."repliesCount" AS "note_repliesCount", "note"."reactions" AS "note_reactions", "note"."visibility" AS "note_visibility", "note"."uri" AS "note_uri", "note"."url" AS "note_url", "note"."fileIds" AS "note_fileIds", "note"."attachedFileTypes" AS "note_attachedFileTypes", "note"."visibleUserIds" AS "note_visibleUserIds", "note"."mentions" AS "note_mentions", "note"."mentionedRemoteUsers" AS "note_mentionedRemoteUsers", "note"."emojis" AS "note_emojis", "note"."tags" AS "note_tags", "note"."hasPoll" AS "note_hasPoll", "note"."channelId" AS "note_channelId", "note"."userHost" AS "note_userHost", "note"."replyUserId" AS "note_replyUserId", "note"."replyUserHost" AS "note_replyUserHost", "note"."renoteUserId" AS "note_renoteUserId", "note"."renoteUserHost" AS "note_renoteUserHost", "user"."id" AS "user_id", "user"."createdAt" AS "user_createdAt", "user"."updatedAt" AS "user_updatedAt", "user"."lastFetchedAt" AS "user_lastFetchedAt", "user"."lastActiveDate" AS "user_lastActiveDate", "user"."hideOnlineStatus" AS "user_hideOnlineStatus", "user"."username" AS "user_username", "user"."name" AS "user_name", "user"."followersCount" AS "user_followersCount", "user"."followingCount" AS "user_followingCount", "user"."movedToUri" AS "user_movedToUri", "user"."movedAt" AS "user_movedAt", "user"."alsoKnownAs" AS "user_alsoKnownAs", "user"."notesCount" AS "user_notesCount", "user"."avatarId" AS "user_avatarId", "user"."bannerId" AS "user_bannerId", "user"."avatarUrl" AS "user_avatarUrl", "user"."bannerUrl" AS "user_bannerUrl", "user"."avatarBlurhash" AS "user_avatarBlurhash", "user"."bannerBlurhash" AS "user_bannerBlurhash", "user"."tags" AS "user_tags", "user"."isSuspended" AS "user_isSuspended", "user"."isLocked" AS "user_isLocked", "user"."isBot" AS "user_isBot", "user"."isCat" AS "user_isCat", "user"."isRoot" AS "user_isRoot", "user"."isExplorable" AS "user_isExplorable", "user"."isDeleted" AS "user_isDeleted", "user"."emojis" AS "user_emojis", "user"."host" AS "user_host", "user"."inbox" AS "user_inbox", "user"."sharedInbox" AS "user_sharedInbox", "user"."featured" AS "user_featured", "user"."uri" AS "user_uri", "user"."followersUri" AS "user_followersUri", "user"."token" AS "user_token", "reply"."id" AS "reply_id", "reply"."createdAt" AS "reply_createdAt", "reply"."replyId" AS "reply_replyId", "reply"."renoteId" AS "reply_renoteId", "reply"."threadId" AS "reply_threadId", "reply"."text" AS "reply_text", "reply"."name" AS "reply_name", "reply"."cw" AS "reply_cw", "reply"."userId" AS "reply_userId", "reply"."localOnly" AS "reply_localOnly", "reply"."reactionAcceptance" AS "reply_reactionAcceptance", "reply"."renoteCount" AS "reply_renoteCount", "reply"."repliesCount" AS "reply_repliesCount", "reply"."reactions" AS "reply_reactions", "reply"."visibility" AS "reply_visibility", "reply"."uri" AS "reply_uri", "reply"."url" AS "reply_url", "reply"."fileIds" AS "reply_fileIds", "reply"."attachedFileTypes" AS "reply_attachedFileTypes", "reply"."visibleUserIds" AS "reply_visibleUserIds", "reply"."mentions" AS "reply_mentions", "reply"."mentionedRemoteUsers" AS "reply_mentionedRemoteUsers", "reply"."emojis" AS "reply_emojis", "reply"."tags" AS "reply_tags", "reply"."hasPoll" AS "reply_hasPoll", "reply"."channelId" AS "reply_channelId", "reply"."userHost" AS "reply_userHost", "reply"."replyUserId" AS "reply_replyUserId", "reply"."replyUserHost" AS "reply_replyUserHost", "reply"."renoteUserId" AS "reply_renoteUserId", "reply"."renoteUserHost" AS "reply_renoteUserHost", "renote"."id" AS "renote_id", "renote"."createdAt" AS "renote_createdAt", "renote"."replyId" AS "renote_replyId", "renote"."renoteId" AS "renote_renoteId", "renote"."threadId" AS "renote_threadId", "renote"."text" AS "renote_text", "renote"."name" AS "renote_name", "renote"."cw" AS "renote_cw", "renote"."userId" AS "renote_userId", "renote"."localOnly" AS "renote_localOnly", "renote"."reactionAcceptance" AS "renote_reactionAcceptance", "renote"."renoteCount" AS "renote_renoteCount", "renote"."repliesCount" AS "renote_repliesCount", "renote"."reactions" AS "renote_reactions", "renote"."visibility" AS "renote_visibility", "renote"."uri" AS "renote_uri", "renote"."url" AS "renote_url", "renote"."fileIds" AS "renote_fileIds", "renote"."attachedFileTypes" AS "renote_attachedFileTypes", "renote"."visibleUserIds" AS "renote_visibleUserIds", "renote"."mentions" AS "renote_mentions", "renote"."mentionedRemoteUsers" AS "renote_mentionedRemoteUsers", "renote"."emojis" AS "renote_emojis", "renote"."tags" AS "renote_tags", "renote"."hasPoll" AS "renote_hasPoll", "renote"."channelId" AS "renote_channelId", "renote"."userHost" AS "renote_userHost", "renote"."replyUserId" AS "renote_replyUserId", "renote"."replyUserHost" AS "renote_replyUserHost", "renote"."renoteUserId" AS "renote_renoteUserId", "renote"."renoteUserHost" AS "renote_renoteUserHost", "replyUser"."id" AS "replyUser_id", "replyUser"."createdAt" AS "replyUser_createdAt", "replyUser"."updatedAt" AS "replyUser_updatedAt", "replyUser"."lastFetchedAt" AS "replyUser_lastFetchedAt", "replyUser"."lastActiveDate" AS "replyUser_lastActiveDate", "replyUser"."hideOnlineStatus" AS "replyUser_hideOnlineStatus", "replyUser"."username" AS "replyUser_username", "replyUser"."name" AS "replyUser_name", "replyUser"."followersCount" AS "replyUser_followersCount", "replyUser"."followingCount" AS "replyUser_followingCount", "replyUser"."movedToUri" AS "replyUser_movedToUri", "replyUser"."movedAt" AS "replyUser_movedAt", "replyUser"."alsoKnownAs" AS "replyUser_alsoKnownAs", "replyUser"."notesCount" AS "replyUser_notesCount", "replyUser"."avatarId" AS "replyUser_avatarId", "replyUser"."bannerId" AS "replyUser_bannerId", "replyUser"."avatarUrl" AS "replyUser_avatarUrl", "replyUser"."bannerUrl" AS "replyUser_bannerUrl", "replyUser"."avatarBlurhash" AS "replyUser_avatarBlurhash", "replyUser"."bannerBlurhash" AS "replyUser_bannerBlurhash", "replyUser"."tags" AS "replyUser_tags", "replyUser"."isSuspended" AS "replyUser_isSuspended", "replyUser"."isLocked" AS "replyUser_isLocked", "replyUser"."isBot" AS "replyUser_isBot", "replyUser"."isCat" AS "replyUser_isCat", "replyUser"."isRoot" AS "replyUser_isRoot", "replyUser"."isExplorable" AS "replyUser_isExplorable", "replyUser"."isDeleted" AS "replyUser_isDeleted", "replyUser"."emojis" AS "replyUser_emojis", "replyUser"."host" AS "replyUser_host", "replyUser"."inbox" AS "replyUser_inbox", "replyUser"."sharedInbox" AS "replyUser_sharedInbox", "replyUser"."featured" AS "replyUser_featured", "replyUser"."uri" AS "replyUser_uri", "replyUser"."followersUri" AS "replyUser_followersUri", "replyUser"."token" AS "replyUser_token", "renoteUser"."id" AS "renoteUser_id", "renoteUser"."createdAt" AS "renoteUser_createdAt", "renoteUser"."updatedAt" AS "renoteUser_updatedAt", "renoteUser"."lastFetchedAt" AS "renoteUser_lastFetchedAt", "renoteUser"."lastActiveDate" AS "renoteUser_lastActiveDate", "renoteUser"."hideOnlineStatus" AS "renoteUser_hideOnlineStatus", "renoteUser"."username" AS "renoteUser_username", "renoteUser"."name" AS "renoteUser_name", "renoteUser"."followersCount" AS "renoteUser_followersCount", "renoteUser"."followingCount" AS "renoteUser_followingCount", "renoteUser"."movedToUri" AS "renoteUser_movedToUri", "renoteUser"."movedAt" AS "renoteUser_movedAt", "renoteUser"."alsoKnownAs" AS "renoteUser_alsoKnownAs", "renoteUser"."notesCount" AS "renoteUser_notesCount", "renoteUser"."avatarId" AS "renoteUser_avatarId", "renoteUser"."bannerId" AS "renoteUser_bannerId", "renoteUser"."avatarUrl" AS "renoteUser_avatarUrl", "renoteUser"."bannerUrl" AS "renoteUser_bannerUrl", "renoteUser"."avatarBlurhash" AS "renoteUser_avatarBlurhash", "renoteUser"."bannerBlurhash" AS "renoteUser_bannerBlurhash", "renoteUser"."tags" AS "renoteUser_tags", "renoteUser"."isSuspended" AS "renoteUser_isSuspended", "renoteUser"."isLocked" AS "renoteUser_isLocked", "renoteUser"."isBot" AS "renoteUser_isBot", "renoteUser"."isCat" AS "renoteUser_isCat", "renoteUser"."isRoot" AS "renoteUser_isRoot", "renoteUser"."isExplorable" AS "renoteUser_isExplorable", "renoteUser"."isDeleted" AS "renoteUser_isDeleted", "renoteUser"."emojis" AS "renoteUser_emojis", "renoteUser"."host" AS "renoteUser_host", "renoteUser"."inbox" AS "renoteUser_inbox", "renoteUser"."sharedInbox" AS "renoteUser_sharedInbox", "renoteUser"."featured" AS "renoteUser_featured", "renoteUser"."uri" AS "renoteUser_uri", "renoteUser"."followersUri" AS "renoteUser_followersUri", "renoteUser"."token" AS "renoteUser_token" FROM "note" "note" INNER JOIN "user" "user" ON "user"."id"="note"."userId"  LEFT JOIN "note" "reply" ON "reply"."id"="note"."replyId"  LEFT JOIN "note" "renote" ON "renote"."id"="note"."renoteId"  LEFT JOIN "user" "replyUser" ON "replyUser"."id"="reply"."userId"  LEFT JOIN "user" "renoteUser" ON "renoteUser"."id"="renote"."userId" WHERE "note"."id" < $1 AND "note"."userId" = $2 AND ("note"."visibility" = $3 OR "note"."visibility" = $4)) "distinctAlias" ORDER BY "distinctAlias"."note_id" DESC, "note_id" ASC LIMIT $5 | 0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 835 | 195447.5877150000 | 0.048698 | 60334.023031000000 | 234.06896732335300 | 2602.273461907280 | 15726 | 17317624 | 1163440 | 1039 | 69 | 0 | 0 | 0 | 0 | 0 | 0 | 0.0 | 0.0 | 0.0 | 0.0 | 1098 | 918 | 6695730 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0
16822 | 16426 | TRUE | 6047802554448485168 | SELECT DISTINCT "distinctAlias"."note_id" AS "ids_note_id", "distinctAlias"."note_id" FROM (SELECT "note"."id" AS "note_id", "note"."createdAt" AS "note_createdAt", "note"."replyId" AS "note_replyId", "note"."renoteId" AS "note_renoteId", "note"."threadId" AS "note_threadId", "note"."text" AS "note_text", "note"."name" AS "note_name", "note"."cw" AS "note_cw", "note"."userId" AS "note_userId", "note"."localOnly" AS "note_localOnly", "note"."reactionAcceptance" AS "note_reactionAcceptance", "note"."renoteCount" AS "note_renoteCount", "note"."repliesCount" AS "note_repliesCount", "note"."reactions" AS "note_reactions", "note"."visibility" AS "note_visibility", "note"."uri" AS "note_uri", "note"."url" AS "note_url", "note"."fileIds" AS "note_fileIds", "note"."attachedFileTypes" AS "note_attachedFileTypes", "note"."visibleUserIds" AS "note_visibleUserIds", "note"."mentions" AS "note_mentions", "note"."mentionedRemoteUsers" AS "note_mentionedRemoteUsers", "note"."emojis" AS "note_emojis", "note"."tags" AS "note_tags", "note"."hasPoll" AS "note_hasPoll", "note"."channelId" AS "note_channelId", "note"."userHost" AS "note_userHost", "note"."replyUserId" AS "note_replyUserId", "note"."replyUserHost" AS "note_replyUserHost", "note"."renoteUserId" AS "note_renoteUserId", "note"."renoteUserHost" AS "note_renoteUserHost", "user"."id" AS "user_id", "user"."createdAt" AS "user_createdAt", "user"."updatedAt" AS "user_updatedAt", "user"."lastFetchedAt" AS "user_lastFetchedAt", "user"."lastActiveDate" AS "user_lastActiveDate", "user"."hideOnlineStatus" AS "user_hideOnlineStatus", "user"."username" AS "user_username", "user"."name" AS "user_name", "user"."followersCount" AS "user_followersCount", "user"."followingCount" AS "user_followingCount", "user"."movedToUri" AS "user_movedToUri", "user"."movedAt" AS "user_movedAt", "user"."alsoKnownAs" AS "user_alsoKnownAs", "user"."notesCount" AS "user_notesCount", "user"."avatarId" AS "user_avatarId", "user"."bannerId" AS "user_bannerId", "user"."avatarUrl" AS "user_avatarUrl", "user"."bannerUrl" AS "user_bannerUrl", "user"."avatarBlurhash" AS "user_avatarBlurhash", "user"."bannerBlurhash" AS "user_bannerBlurhash", "user"."tags" AS "user_tags", "user"."isSuspended" AS "user_isSuspended", "user"."isLocked" AS "user_isLocked", "user"."isBot" AS "user_isBot", "user"."isCat" AS "user_isCat", "user"."isRoot" AS "user_isRoot", "user"."isExplorable" AS "user_isExplorable", "user"."isDeleted" AS "user_isDeleted", "user"."emojis" AS "user_emojis", "user"."host" AS "user_host", "user"."inbox" AS "user_inbox", "user"."sharedInbox" AS "user_sharedInbox", "user"."featured" AS "user_featured", "user"."uri" AS "user_uri", "user"."followersUri" AS "user_followersUri", "user"."token" AS "user_token", "reply"."id" AS "reply_id", "reply"."createdAt" AS "reply_createdAt", "reply"."replyId" AS "reply_replyId", "reply"."renoteId" AS "reply_renoteId", "reply"."threadId" AS "reply_threadId", "reply"."text" AS "reply_text", "reply"."name" AS "reply_name", "reply"."cw" AS "reply_cw", "reply"."userId" AS "reply_userId", "reply"."localOnly" AS "reply_localOnly", "reply"."reactionAcceptance" AS "reply_reactionAcceptance", "reply"."renoteCount" AS "reply_renoteCount", "reply"."repliesCount" AS "reply_repliesCount", "reply"."reactions" AS "reply_reactions", "reply"."visibility" AS "reply_visibility", "reply"."uri" AS "reply_uri", "reply"."url" AS "reply_url", "reply"."fileIds" AS "reply_fileIds", "reply"."attachedFileTypes" AS "reply_attachedFileTypes", "reply"."visibleUserIds" AS "reply_visibleUserIds", "reply"."mentions" AS "reply_mentions", "reply"."mentionedRemoteUsers" AS "reply_mentionedRemoteUsers", "reply"."emojis" AS "reply_emojis", "reply"."tags" AS "reply_tags", "reply"."hasPoll" AS "reply_hasPoll", "reply"."channelId" AS "reply_channelId", "reply"."userHost" AS "reply_userHost", "reply"."replyUserId" AS "reply_replyUserId", "reply"."replyUserHost" AS "reply_replyUserHost", "reply"."renoteUserId" AS "reply_renoteUserId", "reply"."renoteUserHost" AS "reply_renoteUserHost", "renote"."id" AS "renote_id", "renote"."createdAt" AS "renote_createdAt", "renote"."replyId" AS "renote_replyId", "renote"."renoteId" AS "renote_renoteId", "renote"."threadId" AS "renote_threadId", "renote"."text" AS "renote_text", "renote"."name" AS "renote_name", "renote"."cw" AS "renote_cw", "renote"."userId" AS "renote_userId", "renote"."localOnly" AS "renote_localOnly", "renote"."reactionAcceptance" AS "renote_reactionAcceptance", "renote"."renoteCount" AS "renote_renoteCount", "renote"."repliesCount" AS "renote_repliesCount", "renote"."reactions" AS "renote_reactions", "renote"."visibility" AS "renote_visibility", "renote"."uri" AS "renote_uri", "renote"."url" AS "renote_url", "renote"."fileIds" AS "renote_fileIds", "renote"."attachedFileTypes" AS "renote_attachedFileTypes", "renote"."visibleUserIds" AS "renote_visibleUserIds", "renote"."mentions" AS "renote_mentions", "renote"."mentionedRemoteUsers" AS "renote_mentionedRemoteUsers", "renote"."emojis" AS "renote_emojis", "renote"."tags" AS "renote_tags", "renote"."hasPoll" AS "renote_hasPoll", "renote"."channelId" AS "renote_channelId", "renote"."userHost" AS "renote_userHost", "renote"."replyUserId" AS "renote_replyUserId", "renote"."replyUserHost" AS "renote_replyUserHost", "renote"."renoteUserId" AS "renote_renoteUserId", "renote"."renoteUserHost" AS "renote_renoteUserHost", "replyUser"."id" AS "replyUser_id", "replyUser"."createdAt" AS "replyUser_createdAt", "replyUser"."updatedAt" AS "replyUser_updatedAt", "replyUser"."lastFetchedAt" AS "replyUser_lastFetchedAt", "replyUser"."lastActiveDate" AS "replyUser_lastActiveDate", "replyUser"."hideOnlineStatus" AS "replyUser_hideOnlineStatus", "replyUser"."username" AS "replyUser_username", "replyUser"."name" AS "replyUser_name", "replyUser"."followersCount" AS "replyUser_followersCount", "replyUser"."followingCount" AS "replyUser_followingCount", "replyUser"."movedToUri" AS "replyUser_movedToUri", "replyUser"."movedAt" AS "replyUser_movedAt", "replyUser"."alsoKnownAs" AS "replyUser_alsoKnownAs", "replyUser"."notesCount" AS "replyUser_notesCount", "replyUser"."avatarId" AS "replyUser_avatarId", "replyUser"."bannerId" AS "replyUser_bannerId", "replyUser"."avatarUrl" AS "replyUser_avatarUrl", "replyUser"."bannerUrl" AS "replyUser_bannerUrl", "replyUser"."avatarBlurhash" AS "replyUser_avatarBlurhash", "replyUser"."bannerBlurhash" AS "replyUser_bannerBlurhash", "replyUser"."tags" AS "replyUser_tags", "replyUser"."isSuspended" AS "replyUser_isSuspended", "replyUser"."isLocked" AS "replyUser_isLocked", "replyUser"."isBot" AS "replyUser_isBot", "replyUser"."isCat" AS "replyUser_isCat", "replyUser"."isRoot" AS "replyUser_isRoot", "replyUser"."isExplorable" AS "replyUser_isExplorable", "replyUser"."isDeleted" AS "replyUser_isDeleted", "replyUser"."emojis" AS "replyUser_emojis", "replyUser"."host" AS "replyUser_host", "replyUser"."inbox" AS "replyUser_inbox", "replyUser"."sharedInbox" AS "replyUser_sharedInbox", "replyUser"."featured" AS "replyUser_featured", "replyUser"."uri" AS "replyUser_uri", "replyUser"."followersUri" AS "replyUser_followersUri", "replyUser"."token" AS "replyUser_token", "renoteUser"."id" AS "renoteUser_id", "renoteUser"."createdAt" AS "renoteUser_createdAt", "renoteUser"."updatedAt" AS "renoteUser_updatedAt", "renoteUser"."lastFetchedAt" AS "renoteUser_lastFetchedAt", "renoteUser"."lastActiveDate" AS "renoteUser_lastActiveDate", "renoteUser"."hideOnlineStatus" AS "renoteUser_hideOnlineStatus", "renoteUser"."username" AS "renoteUser_username", "renoteUser"."name" AS "renoteUser_name", "renoteUser"."followersCount" AS "renoteUser_followersCount", "renoteUser"."followingCount" AS "renoteUser_followingCount", "renoteUser"."movedToUri" AS "renoteUser_movedToUri", "renoteUser"."movedAt" AS "renoteUser_movedAt", "renoteUser"."alsoKnownAs" AS "renoteUser_alsoKnownAs", "renoteUser"."notesCount" AS "renoteUser_notesCount", "renoteUser"."avatarId" AS "renoteUser_avatarId", "renoteUser"."bannerId" AS "renoteUser_bannerId", "renoteUser"."avatarUrl" AS "renoteUser_avatarUrl", "renoteUser"."bannerUrl" AS "renoteUser_bannerUrl", "renoteUser"."avatarBlurhash" AS "renoteUser_avatarBlurhash", "renoteUser"."bannerBlurhash" AS "renoteUser_bannerBlurhash", "renoteUser"."tags" AS "renoteUser_tags", "renoteUser"."isSuspended" AS "renoteUser_isSuspended", "renoteUser"."isLocked" AS "renoteUser_isLocked", "renoteUser"."isBot" AS "renoteUser_isBot", "renoteUser"."isCat" AS "renoteUser_isCat", "renoteUser"."isRoot" AS "renoteUser_isRoot", "renoteUser"."isExplorable" AS "renoteUser_isExplorable", "renoteUser"."isDeleted" AS "renoteUser_isDeleted", "renoteUser"."emojis" AS "renoteUser_emojis", "renoteUser"."host" AS "renoteUser_host", "renoteUser"."inbox" AS "renoteUser_inbox", "renoteUser"."sharedInbox" AS "renoteUser_sharedInbox", "renoteUser"."featured" AS "renoteUser_featured", "renoteUser"."uri" AS "renoteUser_uri", "renoteUser"."followersUri" AS "renoteUser_followersUri", "renoteUser"."token" AS "renoteUser_token" FROM "note" "note" INNER JOIN "user_list_joining" "userListJoining" ON "userListJoining"."userId" = "note"."userId"  INNER JOIN "user" "user" ON "user"."id"="note"."userId"  LEFT JOIN "note" "reply" ON "reply"."id"="note"."replyId"  LEFT JOIN "note" "renote" ON "renote"."id"="note"."renoteId"  LEFT JOIN "user" "replyUser" ON "replyUser"."id"="reply"."userId"  LEFT JOIN "user" "renoteUser" ON "renoteUser"."id"="renote"."userId" WHERE "userListJoining"."userListId" = $1 AND (("note"."visibility" = $7 OR "note"."visibility" = $8) OR "note"."userId" = $2 OR $3 = ANY("note"."visibleUserIds") OR $4 = ANY("note"."mentions") OR ("note"."visibility" = $9 AND ("note"."userId" IN (SELECT "following"."followeeId" AS "following_followeeId" FROM "following" "following" WHERE "following"."followerId" = $5) OR "note"."replyUserId" = $6)))) "distinctAlias" ORDER BY "distinctAlias"."note_id" DESC, "note_id" ASC LIMIT $10 | 0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 2405 | 1155895.4092980000 | 0.03266 | 47591.22705 | 480.6217918079010 | 1349.8401904937000 | 24362 | 24448039 | 7372857 | 1662 | 5848 | 0 | 0 | 0 | 0 | 0 | 0 | 0.0 | 0.0 | 0.0 | 0.0 | 2518 | 1435 | 10378057 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0
16822 | 16426 | TRUE | -4295012842788197408 | SELECT DISTINCT "distinctAlias"."reaction_id" AS "ids_reaction_id", "distinctAlias"."reaction_id" FROM (SELECT "reaction"."id" AS "reaction_id", "reaction"."createdAt" AS "reaction_createdAt", "reaction"."userId" AS "reaction_userId", "reaction"."noteId" AS "reaction_noteId", "reaction"."reaction" AS "reaction_reaction", "note"."id" AS "note_id", "note"."createdAt" AS "note_createdAt", "note"."replyId" AS "note_replyId", "note"."renoteId" AS "note_renoteId", "note"."threadId" AS "note_threadId", "note"."text" AS "note_text", "note"."name" AS "note_name", "note"."cw" AS "note_cw", "note"."userId" AS "note_userId", "note"."localOnly" AS "note_localOnly", "note"."reactionAcceptance" AS "note_reactionAcceptance", "note"."renoteCount" AS "note_renoteCount", "note"."repliesCount" AS "note_repliesCount", "note"."reactions" AS "note_reactions", "note"."visibility" AS "note_visibility", "note"."uri" AS "note_uri", "note"."url" AS "note_url", "note"."fileIds" AS "note_fileIds", "note"."attachedFileTypes" AS "note_attachedFileTypes", "note"."visibleUserIds" AS "note_visibleUserIds", "note"."mentions" AS "note_mentions", "note"."mentionedRemoteUsers" AS "note_mentionedRemoteUsers", "note"."emojis" AS "note_emojis", "note"."tags" AS "note_tags", "note"."hasPoll" AS "note_hasPoll", "note"."channelId" AS "note_channelId", "note"."userHost" AS "note_userHost", "note"."replyUserId" AS "note_replyUserId", "note"."replyUserHost" AS "note_replyUserHost", "note"."renoteUserId" AS "note_renoteUserId", "note"."renoteUserHost" AS "note_renoteUserHost" FROM "note_reaction" "reaction" LEFT JOIN "note" "note" ON "note"."id"="reaction"."noteId" WHERE "reaction"."userId" = $1 AND ("note"."visibility" = $2 OR "note"."visibility" = $3)) "distinctAlias" ORDER BY "distinctAlias"."reaction_id" DESC, "reaction_id" ASC LIMIT $4 | 0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 38 | 109068.08901100000 | 1.266135 | 37117.411897 | 2870.212868710530 | 7575.171793860580 | 660 | 36941666 | 794634 | 2714 | 465 | 0 | 0 | 0 | 0 | 0 | 0 | 0.0 | 0.0 | 0.0 | 0.0 | 2560 | 2485 | 18471909 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0
16822 | 16426 | TRUE | -1765600823722344336 | SELECT DISTINCT "distinctAlias"."note_id" AS "ids_note_id", "distinctAlias"."note_id" FROM (SELECT "note"."id" AS "note_id", "note"."createdAt" AS "note_createdAt", "note"."replyId" AS "note_replyId", "note"."renoteId" AS "note_renoteId", "note"."threadId" AS "note_threadId", "note"."text" AS "note_text", "note"."name" AS "note_name", "note"."cw" AS "note_cw", "note"."userId" AS "note_userId", "note"."localOnly" AS "note_localOnly", "note"."reactionAcceptance" AS "note_reactionAcceptance", "note"."renoteCount" AS "note_renoteCount", "note"."repliesCount" AS "note_repliesCount", "note"."reactions" AS "note_reactions", "note"."visibility" AS "note_visibility", "note"."uri" AS "note_uri", "note"."url" AS "note_url", "note"."fileIds" AS "note_fileIds", "note"."attachedFileTypes" AS "note_attachedFileTypes", "note"."visibleUserIds" AS "note_visibleUserIds", "note"."mentions" AS "note_mentions", "note"."mentionedRemoteUsers" AS "note_mentionedRemoteUsers", "note"."emojis" AS "note_emojis", "note"."tags" AS "note_tags", "note"."hasPoll" AS "note_hasPoll", "note"."channelId" AS "note_channelId", "note"."userHost" AS "note_userHost", "note"."replyUserId" AS "note_replyUserId", "note"."replyUserHost" AS "note_replyUserHost", "note"."renoteUserId" AS "note_renoteUserId", "note"."renoteUserHost" AS "note_renoteUserHost", "user"."id" AS "user_id", "user"."createdAt" AS "user_createdAt", "user"."updatedAt" AS "user_updatedAt", "user"."lastFetchedAt" AS "user_lastFetchedAt", "user"."lastActiveDate" AS "user_lastActiveDate", "user"."hideOnlineStatus" AS "user_hideOnlineStatus", "user"."username" AS "user_username", "user"."name" AS "user_name", "user"."followersCount" AS "user_followersCount", "user"."followingCount" AS "user_followingCount", "user"."movedToUri" AS "user_movedToUri", "user"."movedAt" AS "user_movedAt", "user"."alsoKnownAs" AS "user_alsoKnownAs", "user"."notesCount" AS "user_notesCount", "user"."avatarId" AS "user_avatarId", "user"."bannerId" AS "user_bannerId", "user"."avatarUrl" AS "user_avatarUrl", "user"."bannerUrl" AS "user_bannerUrl", "user"."avatarBlurhash" AS "user_avatarBlurhash", "user"."bannerBlurhash" AS "user_bannerBlurhash", "user"."tags" AS "user_tags", "user"."isSuspended" AS "user_isSuspended", "user"."isLocked" AS "user_isLocked", "user"."isBot" AS "user_isBot", "user"."isCat" AS "user_isCat", "user"."isRoot" AS "user_isRoot", "user"."isExplorable" AS "user_isExplorable", "user"."isDeleted" AS "user_isDeleted", "user"."emojis" AS "user_emojis", "user"."host" AS "user_host", "user"."inbox" AS "user_inbox", "user"."sharedInbox" AS "user_sharedInbox", "user"."featured" AS "user_featured", "user"."uri" AS "user_uri", "user"."followersUri" AS "user_followersUri", "user"."token" AS "user_token", "reply"."id" AS "reply_id", "reply"."createdAt" AS "reply_createdAt", "reply"."replyId" AS "reply_replyId", "reply"."renoteId" AS "reply_renoteId", "reply"."threadId" AS "reply_threadId", "reply"."text" AS "reply_text", "reply"."name" AS "reply_name", "reply"."cw" AS "reply_cw", "reply"."userId" AS "reply_userId", "reply"."localOnly" AS "reply_localOnly", "reply"."reactionAcceptance" AS "reply_reactionAcceptance", "reply"."renoteCount" AS "reply_renoteCount", "reply"."repliesCount" AS "reply_repliesCount", "reply"."reactions" AS "reply_reactions", "reply"."visibility" AS "reply_visibility", "reply"."uri" AS "reply_uri", "reply"."url" AS "reply_url", "reply"."fileIds" AS "reply_fileIds", "reply"."attachedFileTypes" AS "reply_attachedFileTypes", "reply"."visibleUserIds" AS "reply_visibleUserIds", "reply"."mentions" AS "reply_mentions", "reply"."mentionedRemoteUsers" AS "reply_mentionedRemoteUsers", "reply"."emojis" AS "reply_emojis", "reply"."tags" AS "reply_tags", "reply"."hasPoll" AS "reply_hasPoll", "reply"."channelId" AS "reply_channelId", "reply"."userHost" AS "reply_userHost", "reply"."replyUserId" AS "reply_replyUserId", "reply"."replyUserHost" AS "reply_replyUserHost", "reply"."renoteUserId" AS "reply_renoteUserId", "reply"."renoteUserHost" AS "reply_renoteUserHost", "renote"."id" AS "renote_id", "renote"."createdAt" AS "renote_createdAt", "renote"."replyId" AS "renote_replyId", "renote"."renoteId" AS "renote_renoteId", "renote"."threadId" AS "renote_threadId", "renote"."text" AS "renote_text", "renote"."name" AS "renote_name", "renote"."cw" AS "renote_cw", "renote"."userId" AS "renote_userId", "renote"."localOnly" AS "renote_localOnly", "renote"."reactionAcceptance" AS "renote_reactionAcceptance", "renote"."renoteCount" AS "renote_renoteCount", "renote"."repliesCount" AS "renote_repliesCount", "renote"."reactions" AS "renote_reactions", "renote"."visibility" AS "renote_visibility", "renote"."uri" AS "renote_uri", "renote"."url" AS "renote_url", "renote"."fileIds" AS "renote_fileIds", "renote"."attachedFileTypes" AS "renote_attachedFileTypes", "renote"."visibleUserIds" AS "renote_visibleUserIds", "renote"."mentions" AS "renote_mentions", "renote"."mentionedRemoteUsers" AS "renote_mentionedRemoteUsers", "renote"."emojis" AS "renote_emojis", "renote"."tags" AS "renote_tags", "renote"."hasPoll" AS "renote_hasPoll", "renote"."channelId" AS "renote_channelId", "renote"."userHost" AS "renote_userHost", "renote"."replyUserId" AS "renote_replyUserId", "renote"."replyUserHost" AS "renote_replyUserHost", "renote"."renoteUserId" AS "renote_renoteUserId", "renote"."renoteUserHost" AS "renote_renoteUserHost", "replyUser"."id" AS "replyUser_id", "replyUser"."createdAt" AS "replyUser_createdAt", "replyUser"."updatedAt" AS "replyUser_updatedAt", "replyUser"."lastFetchedAt" AS "replyUser_lastFetchedAt", "replyUser"."lastActiveDate" AS "replyUser_lastActiveDate", "replyUser"."hideOnlineStatus" AS "replyUser_hideOnlineStatus", "replyUser"."username" AS "replyUser_username", "replyUser"."name" AS "replyUser_name", "replyUser"."followersCount" AS "replyUser_followersCount", "replyUser"."followingCount" AS "replyUser_followingCount", "replyUser"."movedToUri" AS "replyUser_movedToUri", "replyUser"."movedAt" AS "replyUser_movedAt", "replyUser"."alsoKnownAs" AS "replyUser_alsoKnownAs", "replyUser"."notesCount" AS "replyUser_notesCount", "replyUser"."avatarId" AS "replyUser_avatarId", "replyUser"."bannerId" AS "replyUser_bannerId", "replyUser"."avatarUrl" AS "replyUser_avatarUrl", "replyUser"."bannerUrl" AS "replyUser_bannerUrl", "replyUser"."avatarBlurhash" AS "replyUser_avatarBlurhash", "replyUser"."bannerBlurhash" AS "replyUser_bannerBlurhash", "replyUser"."tags" AS "replyUser_tags", "replyUser"."isSuspended" AS "replyUser_isSuspended", "replyUser"."isLocked" AS "replyUser_isLocked", "replyUser"."isBot" AS "replyUser_isBot", "replyUser"."isCat" AS "replyUser_isCat", "replyUser"."isRoot" AS "replyUser_isRoot", "replyUser"."isExplorable" AS "replyUser_isExplorable", "replyUser"."isDeleted" AS "replyUser_isDeleted", "replyUser"."emojis" AS "replyUser_emojis", "replyUser"."host" AS "replyUser_host", "replyUser"."inbox" AS "replyUser_inbox", "replyUser"."sharedInbox" AS "replyUser_sharedInbox", "replyUser"."featured" AS "replyUser_featured", "replyUser"."uri" AS "replyUser_uri", "replyUser"."followersUri" AS "replyUser_followersUri", "replyUser"."token" AS "replyUser_token", "renoteUser"."id" AS "renoteUser_id", "renoteUser"."createdAt" AS "renoteUser_createdAt", "renoteUser"."updatedAt" AS "renoteUser_updatedAt", "renoteUser"."lastFetchedAt" AS "renoteUser_lastFetchedAt", "renoteUser"."lastActiveDate" AS "renoteUser_lastActiveDate", "renoteUser"."hideOnlineStatus" AS "renoteUser_hideOnlineStatus", "renoteUser"."username" AS "renoteUser_username", "renoteUser"."name" AS "renoteUser_name", "renoteUser"."followersCount" AS "renoteUser_followersCount", "renoteUser"."followingCount" AS "renoteUser_followingCount", "renoteUser"."movedToUri" AS "renoteUser_movedToUri", "renoteUser"."movedAt" AS "renoteUser_movedAt", "renoteUser"."alsoKnownAs" AS "renoteUser_alsoKnownAs", "renoteUser"."notesCount" AS "renoteUser_notesCount", "renoteUser"."avatarId" AS "renoteUser_avatarId", "renoteUser"."bannerId" AS "renoteUser_bannerId", "renoteUser"."avatarUrl" AS "renoteUser_avatarUrl", "renoteUser"."bannerUrl" AS "renoteUser_bannerUrl", "renoteUser"."avatarBlurhash" AS "renoteUser_avatarBlurhash", "renoteUser"."bannerBlurhash" AS "renoteUser_bannerBlurhash", "renoteUser"."tags" AS "renoteUser_tags", "renoteUser"."isSuspended" AS "renoteUser_isSuspended", "renoteUser"."isLocked" AS "renoteUser_isLocked", "renoteUser"."isBot" AS "renoteUser_isBot", "renoteUser"."isCat" AS "renoteUser_isCat", "renoteUser"."isRoot" AS "renoteUser_isRoot", "renoteUser"."isExplorable" AS "renoteUser_isExplorable", "renoteUser"."isDeleted" AS "renoteUser_isDeleted", "renoteUser"."emojis" AS "renoteUser_emojis", "renoteUser"."host" AS "renoteUser_host", "renoteUser"."inbox" AS "renoteUser_inbox", "renoteUser"."sharedInbox" AS "renoteUser_sharedInbox", "renoteUser"."featured" AS "renoteUser_featured", "renoteUser"."uri" AS "renoteUser_uri", "renoteUser"."followersUri" AS "renoteUser_followersUri", "renoteUser"."token" AS "renoteUser_token" FROM "note" "note" INNER JOIN "user" "user" ON "user"."id"="note"."userId"  LEFT JOIN "note" "reply" ON "reply"."id"="note"."replyId"  LEFT JOIN "note" "renote" ON "renote"."id"="note"."renoteId"  LEFT JOIN "user" "replyUser" ON "replyUser"."id"="reply"."userId"  LEFT JOIN "user" "renoteUser" ON "renoteUser"."id"="renote"."userId" WHERE "note"."id" > $1 AND "note"."userId" = $2 AND ("note"."visibility" = $3 OR "note"."visibility" = $4)) "distinctAlias" ORDER BY "distinctAlias"."note_id" ASC, "note_id" ASC LIMIT $5 | 0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 280 | 86080.47453400000 | 0.026333 | 28175.532895 | 307.4302661928570 | 2489.899267513270 | 934 | 8923005 | 608268 | 2080 | 351 | 0 | 0 | 0 | 0 | 0 | 0 | 0.0 | 0.0 | 0.0 | 0.0 | 2155 | 1993 | 14337277 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0
16822 | 16426 | TRUE | 1654036986644845719 | SELECT COUNT($1) AS "cnt" FROM "note" "Note" WHERE (NOT("Note"."userHost" IS NULL)) | 0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1 | 25877.970488 | 25877.970488 | 25877.970488 | 25877.970488 | 0.0 | 1 | 1151161 | 696734 | 2430 | 609 | 0 | 0 | 0 | 0 | 0 | 0 | 0.0 | 0.0 | 0.0 | 0.0 | 2287 | 2272 | 14826898 | 5 | 0.496294 | 0 | 0.0 | 1 | 0.462121 | 1 | 18.538977
16822 | 16426 | TRUE | -7540922400907630251 | SELECT DISTINCT "distinctAlias"."reaction_id" AS "ids_reaction_id", "distinctAlias"."reaction_id" FROM (SELECT "reaction"."id" AS "reaction_id", "reaction"."createdAt" AS "reaction_createdAt", "reaction"."userId" AS "reaction_userId", "reaction"."noteId" AS "reaction_noteId", "reaction"."reaction" AS "reaction_reaction", "note"."id" AS "note_id", "note"."createdAt" AS "note_createdAt", "note"."replyId" AS "note_replyId", "note"."renoteId" AS "note_renoteId", "note"."threadId" AS "note_threadId", "note"."text" AS "note_text", "note"."name" AS "note_name", "note"."cw" AS "note_cw", "note"."userId" AS "note_userId", "note"."localOnly" AS "note_localOnly", "note"."reactionAcceptance" AS "note_reactionAcceptance", "note"."renoteCount" AS "note_renoteCount", "note"."repliesCount" AS "note_repliesCount", "note"."reactions" AS "note_reactions", "note"."visibility" AS "note_visibility", "note"."uri" AS "note_uri", "note"."url" AS "note_url", "note"."fileIds" AS "note_fileIds", "note"."attachedFileTypes" AS "note_attachedFileTypes", "note"."visibleUserIds" AS "note_visibleUserIds", "note"."mentions" AS "note_mentions", "note"."mentionedRemoteUsers" AS "note_mentionedRemoteUsers", "note"."emojis" AS "note_emojis", "note"."tags" AS "note_tags", "note"."hasPoll" AS "note_hasPoll", "note"."channelId" AS "note_channelId", "note"."userHost" AS "note_userHost", "note"."replyUserId" AS "note_replyUserId", "note"."replyUserHost" AS "note_replyUserHost", "note"."renoteUserId" AS "note_renoteUserId", "note"."renoteUserHost" AS "note_renoteUserHost" FROM "note_reaction" "reaction" LEFT JOIN "note" "note" ON "note"."id"="reaction"."noteId" WHERE "reaction"."userId" = $1 AND (("note"."visibility" = $7 OR "note"."visibility" = $8) OR "note"."userId" = $2 OR $3 = ANY("note"."visibleUserIds") OR $4 = ANY("note"."mentions") OR ("note"."visibility" = $9 AND ("note"."userId" IN (SELECT "following"."followeeId" AS "following_followeeId" FROM "following" "following" WHERE "following"."followerId" = $5) OR "note"."replyUserId" = $6)))) "distinctAlias" ORDER BY "distinctAlias"."reaction_id" DESC, "reaction_id" ASC LIMIT $10 | 0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 130 | 616736.6207930000 | 0.5771040000000000 | 18576.845245 | 4744.127852253850 | 7238.885784631330 | 1948 | 283590723 | 5302448 | 3427 | 3126 | 0 | 0 | 0 | 0 | 0 | 0 | 0.0 | 0.0 | 0.0 | 0.0 | 2935 | 1861 | 13533311 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0
16822 | 16426 | TRUE | -2691487539323277329 | SELECT "NoteUnread"."id" AS "NoteUnread_id", "NoteUnread"."userId" AS "NoteUnread_userId", "NoteUnread"."noteId" AS "NoteUnread_noteId", "NoteUnread"."isMentioned" AS "NoteUnread_isMentioned", "NoteUnread"."isSpecified" AS "NoteUnread_isSpecified", "NoteUnread"."noteUserId" AS "NoteUnread_noteUserId", "NoteUnread"."noteChannelId" AS "NoteUnread_noteChannelId" FROM "note_unread" "NoteUnread" WHERE ("NoteUnread"."noteChannelId" = $1 AND "NoteUnread"."userId" = $2) LIMIT $3 | 0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 158135 | 10848611.660474000 | 0.007074 | 15160.238492 | 68.60348221755920 | 657.2720886558900 | 49756 | 67887204 | 38799457 | 118785 | 34243 | 0 | 0 | 0 | 0 | 0 | 0 | 0.0 | 0.0 | 0.0 | 0.0 | 158537 | 110504 | 858707672 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0
16822 | 16426 | TRUE | -6004942123678083980 | SELECT DISTINCT "distinctAlias"."reaction_id" AS "ids_reaction_id", "distinctAlias"."reaction_id" FROM (SELECT "reaction"."id" AS "reaction_id", "reaction"."createdAt" AS "reaction_createdAt", "reaction"."userId" AS "reaction_userId", "reaction"."noteId" AS "reaction_noteId", "reaction"."reaction" AS "reaction_reaction", "note"."id" AS "note_id", "note"."createdAt" AS "note_createdAt", "note"."replyId" AS "note_replyId", "note"."renoteId" AS "note_renoteId", "note"."threadId" AS "note_threadId", "note"."text" AS "note_text", "note"."name" AS "note_name", "note"."cw" AS "note_cw", "note"."userId" AS "note_userId", "note"."localOnly" AS "note_localOnly", "note"."reactionAcceptance" AS "note_reactionAcceptance", "note"."renoteCount" AS "note_renoteCount", "note"."repliesCount" AS "note_repliesCount", "note"."reactions" AS "note_reactions", "note"."visibility" AS "note_visibility", "note"."uri" AS "note_uri", "note"."url" AS "note_url", "note"."fileIds" AS "note_fileIds", "note"."attachedFileTypes" AS "note_attachedFileTypes", "note"."visibleUserIds" AS "note_visibleUserIds", "note"."mentions" AS "note_mentions", "note"."mentionedRemoteUsers" AS "note_mentionedRemoteUsers", "note"."emojis" AS "note_emojis", "note"."tags" AS "note_tags", "note"."hasPoll" AS "note_hasPoll", "note"."channelId" AS "note_channelId", "note"."userHost" AS "note_userHost", "note"."replyUserId" AS "note_replyUserId", "note"."replyUserHost" AS "note_replyUserHost", "note"."renoteUserId" AS "note_renoteUserId", "note"."renoteUserHost" AS "note_renoteUserHost" FROM "note_reaction" "reaction" LEFT JOIN "note" "note" ON "note"."id"="reaction"."noteId" WHERE "reaction"."id" < $1 AND "reaction"."userId" = $2 AND (("note"."visibility" = $8 OR "note"."visibility" = $9) OR "note"."userId" = $3 OR $4 = ANY("note"."visibleUserIds") OR $5 = ANY("note"."mentions") OR ("note"."visibility" = $10 AND ("note"."userId" IN (SELECT "following"."followeeId" AS "following_followeeId" FROM "following" "following" WHERE "following"."followerId" = $6) OR "note"."replyUserId" = $7)))) "distinctAlias" ORDER BY "distinctAlias"."reaction_id" DESC, "reaction_id" ASC LIMIT $11 | 0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 35 | 17222.766013 | 21.509164000000000 | 14722.809564000000 | 492.0790289428570 | 2443.374730779850 | 960 | 6760904 | 182160 | 18 | 48 | 0 | 0 | 0 | 0 | 0 | 0 | 0.0 | 0.0 | 0.0 | 0.0 | 29 | 11 | 89801 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0
16822 | 16426 | TRUE | -6892100638206848872 | DELETE FROM "user" WHERE "id" IN ($1) | 0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1419 | 64698.88648200010 | 4.457217 | 11767.120392 | 45.59470506131070 | 337.8198344050560 | 1419 | 2082571 | 113871 | 51824 | 65 | 0 | 0 | 0 | 0 | 0 | 0 | 0.0 | 0.0 | 0.0 | 0.0 | 58321 | 51730 | 402572043 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0
16822 | 16426 | TRUE | 1136360094718252966 | SELECT DISTINCT "distinctAlias"."note_id" AS "ids_note_id", "distinctAlias"."note_id" FROM (SELECT "note"."id" AS "note_id", "note"."createdAt" AS "note_createdAt", "note"."replyId" AS "note_replyId", "note"."renoteId" AS "note_renoteId", "note"."threadId" AS "note_threadId", "note"."text" AS "note_text", "note"."name" AS "note_name", "note"."cw" AS "note_cw", "note"."userId" AS "note_userId", "note"."localOnly" AS "note_localOnly", "note"."reactionAcceptance" AS "note_reactionAcceptance", "note"."renoteCount" AS "note_renoteCount", "note"."repliesCount" AS "note_repliesCount", "note"."reactions" AS "note_reactions", "note"."visibility" AS "note_visibility", "note"."uri" AS "note_uri", "note"."url" AS "note_url", "note"."fileIds" AS "note_fileIds", "note"."attachedFileTypes" AS "note_attachedFileTypes", "note"."visibleUserIds" AS "note_visibleUserIds", "note"."mentions" AS "note_mentions", "note"."mentionedRemoteUsers" AS "note_mentionedRemoteUsers", "note"."emojis" AS "note_emojis", "note"."tags" AS "note_tags", "note"."hasPoll" AS "note_hasPoll", "note"."channelId" AS "note_channelId", "note"."userHost" AS "note_userHost", "note"."replyUserId" AS "note_replyUserId", "note"."replyUserHost" AS "note_replyUserHost", "note"."renoteUserId" AS "note_renoteUserId", "note"."renoteUserHost" AS "note_renoteUserHost", "user"."id" AS "user_id", "user"."createdAt" AS "user_createdAt", "user"."updatedAt" AS "user_updatedAt", "user"."lastFetchedAt" AS "user_lastFetchedAt", "user"."lastActiveDate" AS "user_lastActiveDate", "user"."hideOnlineStatus" AS "user_hideOnlineStatus", "user"."username" AS "user_username", "user"."name" AS "user_name", "user"."followersCount" AS "user_followersCount", "user"."followingCount" AS "user_followingCount", "user"."movedToUri" AS "user_movedToUri", "user"."movedAt" AS "user_movedAt", "user"."alsoKnownAs" AS "user_alsoKnownAs", "user"."notesCount" AS "user_notesCount", "user"."avatarId" AS "user_avatarId", "user"."bannerId" AS "user_bannerId", "user"."avatarUrl" AS "user_avatarUrl", "user"."bannerUrl" AS "user_bannerUrl", "user"."avatarBlurhash" AS "user_avatarBlurhash", "user"."bannerBlurhash" AS "user_bannerBlurhash", "user"."tags" AS "user_tags", "user"."isSuspended" AS "user_isSuspended", "user"."isLocked" AS "user_isLocked", "user"."isBot" AS "user_isBot", "user"."isCat" AS "user_isCat", "user"."isRoot" AS "user_isRoot", "user"."isExplorable" AS "user_isExplorable", "user"."isDeleted" AS "user_isDeleted", "user"."emojis" AS "user_emojis", "user"."host" AS "user_host", "user"."inbox" AS "user_inbox", "user"."sharedInbox" AS "user_sharedInbox", "user"."featured" AS "user_featured", "user"."uri" AS "user_uri", "user"."followersUri" AS "user_followersUri", "user"."token" AS "user_token", "reply"."id" AS "reply_id", "reply"."createdAt" AS "reply_createdAt", "reply"."replyId" AS "reply_replyId", "reply"."renoteId" AS "reply_renoteId", "reply"."threadId" AS "reply_threadId", "reply"."text" AS "reply_text", "reply"."name" AS "reply_name", "reply"."cw" AS "reply_cw", "reply"."userId" AS "reply_userId", "reply"."localOnly" AS "reply_localOnly", "reply"."reactionAcceptance" AS "reply_reactionAcceptance", "reply"."renoteCount" AS "reply_renoteCount", "reply"."repliesCount" AS "reply_repliesCount", "reply"."reactions" AS "reply_reactions", "reply"."visibility" AS "reply_visibility", "reply"."uri" AS "reply_uri", "reply"."url" AS "reply_url", "reply"."fileIds" AS "reply_fileIds", "reply"."attachedFileTypes" AS "reply_attachedFileTypes", "reply"."visibleUserIds" AS "reply_visibleUserIds", "reply"."mentions" AS "reply_mentions", "reply"."mentionedRemoteUsers" AS "reply_mentionedRemoteUsers", "reply"."emojis" AS "reply_emojis", "reply"."tags" AS "reply_tags", "reply"."hasPoll" AS "reply_hasPoll", "reply"."channelId" AS "reply_channelId", "reply"."userHost" AS "reply_userHost", "reply"."replyUserId" AS "reply_replyUserId", "reply"."replyUserHost" AS "reply_replyUserHost", "reply"."renoteUserId" AS "reply_renoteUserId", "reply"."renoteUserHost" AS "reply_renoteUserHost", "renote"."id" AS "renote_id", "renote"."createdAt" AS "renote_createdAt", "renote"."replyId" AS "renote_replyId", "renote"."renoteId" AS "renote_renoteId", "renote"."threadId" AS "renote_threadId", "renote"."text" AS "renote_text", "renote"."name" AS "renote_name", "renote"."cw" AS "renote_cw", "renote"."userId" AS "renote_userId", "renote"."localOnly" AS "renote_localOnly", "renote"."reactionAcceptance" AS "renote_reactionAcceptance", "renote"."renoteCount" AS "renote_renoteCount", "renote"."repliesCount" AS "renote_repliesCount", "renote"."reactions" AS "renote_reactions", "renote"."visibility" AS "renote_visibility", "renote"."uri" AS "renote_uri", "renote"."url" AS "renote_url", "renote"."fileIds" AS "renote_fileIds", "renote"."attachedFileTypes" AS "renote_attachedFileTypes", "renote"."visibleUserIds" AS "renote_visibleUserIds", "renote"."mentions" AS "renote_mentions", "renote"."mentionedRemoteUsers" AS "renote_mentionedRemoteUsers", "renote"."emojis" AS "renote_emojis", "renote"."tags" AS "renote_tags", "renote"."hasPoll" AS "renote_hasPoll", "renote"."channelId" AS "renote_channelId", "renote"."userHost" AS "renote_userHost", "renote"."replyUserId" AS "renote_replyUserId", "renote"."replyUserHost" AS "renote_replyUserHost", "renote"."renoteUserId" AS "renote_renoteUserId", "renote"."renoteUserHost" AS "renote_renoteUserHost", "replyUser"."id" AS "replyUser_id", "replyUser"."createdAt" AS "replyUser_createdAt", "replyUser"."updatedAt" AS "replyUser_updatedAt", "replyUser"."lastFetchedAt" AS "replyUser_lastFetchedAt", "replyUser"."lastActiveDate" AS "replyUser_lastActiveDate", "replyUser"."hideOnlineStatus" AS "replyUser_hideOnlineStatus", "replyUser"."username" AS "replyUser_username", "replyUser"."name" AS "replyUser_name", "replyUser"."followersCount" AS "replyUser_followersCount", "replyUser"."followingCount" AS "replyUser_followingCount", "replyUser"."movedToUri" AS "replyUser_movedToUri", "replyUser"."movedAt" AS "replyUser_movedAt", "replyUser"."alsoKnownAs" AS "replyUser_alsoKnownAs", "replyUser"."notesCount" AS "replyUser_notesCount", "replyUser"."avatarId" AS "replyUser_avatarId", "replyUser"."bannerId" AS "replyUser_bannerId", "replyUser"."avatarUrl" AS "replyUser_avatarUrl", "replyUser"."bannerUrl" AS "replyUser_bannerUrl", "replyUser"."avatarBlurhash" AS "replyUser_avatarBlurhash", "replyUser"."bannerBlurhash" AS "replyUser_bannerBlurhash", "replyUser"."tags" AS "replyUser_tags", "replyUser"."isSuspended" AS "replyUser_isSuspended", "replyUser"."isLocked" AS "replyUser_isLocked", "replyUser"."isBot" AS "replyUser_isBot", "replyUser"."isCat" AS "replyUser_isCat", "replyUser"."isRoot" AS "replyUser_isRoot", "replyUser"."isExplorable" AS "replyUser_isExplorable", "replyUser"."isDeleted" AS "replyUser_isDeleted", "replyUser"."emojis" AS "replyUser_emojis", "replyUser"."host" AS "replyUser_host", "replyUser"."inbox" AS "replyUser_inbox", "replyUser"."sharedInbox" AS "replyUser_sharedInbox", "replyUser"."featured" AS "replyUser_featured", "replyUser"."uri" AS "replyUser_uri", "replyUser"."followersUri" AS "replyUser_followersUri", "replyUser"."token" AS "replyUser_token", "renoteUser"."id" AS "renoteUser_id", "renoteUser"."createdAt" AS "renoteUser_createdAt", "renoteUser"."updatedAt" AS "renoteUser_updatedAt", "renoteUser"."lastFetchedAt" AS "renoteUser_lastFetchedAt", "renoteUser"."lastActiveDate" AS "renoteUser_lastActiveDate", "renoteUser"."hideOnlineStatus" AS "renoteUser_hideOnlineStatus", "renoteUser"."username" AS "renoteUser_username", "renoteUser"."name" AS "renoteUser_name", "renoteUser"."followersCount" AS "renoteUser_followersCount", "renoteUser"."followingCount" AS "renoteUser_followingCount", "renoteUser"."movedToUri" AS "renoteUser_movedToUri", "renoteUser"."movedAt" AS "renoteUser_movedAt", "renoteUser"."alsoKnownAs" AS "renoteUser_alsoKnownAs", "renoteUser"."notesCount" AS "renoteUser_notesCount", "renoteUser"."avatarId" AS "renoteUser_avatarId", "renoteUser"."bannerId" AS "renoteUser_bannerId", "renoteUser"."avatarUrl" AS "renoteUser_avatarUrl", "renoteUser"."bannerUrl" AS "renoteUser_bannerUrl", "renoteUser"."avatarBlurhash" AS "renoteUser_avatarBlurhash", "renoteUser"."bannerBlurhash" AS "renoteUser_bannerBlurhash", "renoteUser"."tags" AS "renoteUser_tags", "renoteUser"."isSuspended" AS "renoteUser_isSuspended", "renoteUser"."isLocked" AS "renoteUser_isLocked", "renoteUser"."isBot" AS "renoteUser_isBot", "renoteUser"."isCat" AS "renoteUser_isCat", "renoteUser"."isRoot" AS "renoteUser_isRoot", "renoteUser"."isExplorable" AS "renoteUser_isExplorable", "renoteUser"."isDeleted" AS "renoteUser_isDeleted", "renoteUser"."emojis" AS "renoteUser_emojis", "renoteUser"."host" AS "renoteUser_host", "renoteUser"."inbox" AS "renoteUser_inbox", "renoteUser"."sharedInbox" AS "renoteUser_sharedInbox", "renoteUser"."featured" AS "renoteUser_featured", "renoteUser"."uri" AS "renoteUser_uri", "renoteUser"."followersUri" AS "renoteUser_followersUri", "renoteUser"."token" AS "renoteUser_token" FROM "note" "note" INNER JOIN "user" "user" ON "user"."id"="note"."userId"  LEFT JOIN "note" "reply" ON "reply"."id"="note"."replyId"  LEFT JOIN "note" "renote" ON "renote"."id"="note"."renoteId"  LEFT JOIN "user" "replyUser" ON "replyUser"."id"="reply"."userId"  LEFT JOIN "user" "renoteUser" ON "renoteUser"."id"="renote"."userId" WHERE "note"."userId" = $1 AND (("note"."visibility" = $26 OR "note"."visibility" = $27) OR "note"."userId" = $2 OR $3 = ANY("note"."visibleUserIds") OR $4 = ANY("note"."mentions") OR ("note"."visibility" = $28 AND ("note"."userId" IN (SELECT "following"."followeeId" AS "following_followeeId" FROM "following" "following" WHERE "following"."followerId" = $5) OR "note"."replyUserId" = $6))) AND "note"."userId" NOT IN (SELECT "muting"."muteeId" AS "muting_muteeId" FROM "muting" "muting" WHERE "muting"."muterId" = $7 AND "muting"."muteeId" != $8) AND ("note"."replyUserId" IS NULL OR "note"."replyUserId" NOT IN (SELECT "muting"."muteeId" AS "muting_muteeId" FROM "muting" "muting" WHERE "muting"."muterId" = $9 AND "muting"."muteeId" != $10)) AND ("note"."renoteUserId" IS NULL OR "note"."renoteUserId" NOT IN (SELECT "muting"."muteeId" AS "muting_muteeId" FROM "muting" "muting" WHERE "muting"."muterId" = $11 AND "muting"."muteeId" != $12)) AND ("note"."userHost" IS NULL OR NOT ((SELECT "user_profile"."mutedInstances" AS "user_profile_mutedInstances" FROM "user_profile" "user_profile" WHERE "user_profile"."userId" = $13)::jsonb ? "note"."userHost")) AND ("note"."replyUserHost" IS NULL OR NOT ((SELECT "user_profile"."mutedInstances" AS "user_profile_mutedInstances" FROM "user_profile" "user_profile" WHERE "user_profile"."userId" = $14)::jsonb ? "note"."replyUserHost")) AND ("note"."renoteUserHost" IS NULL OR NOT ((SELECT "user_profile"."mutedInstances" AS "user_profile_mutedInstances" FROM "user_profile" "user_profile" WHERE "user_profile"."userId" = $15)::jsonb ? "note"."renoteUserHost")) AND "note"."userId" NOT IN (SELECT "blocking"."blockerId" AS "blocking_blockerId" FROM "blocking" "blocking" WHERE "blocking"."blockeeId" = $16) AND ("note"."replyUserId" IS NULL OR "note"."replyUserId" NOT IN (SELECT "blocking"."blockerId" AS "blocking_blockerId" FROM "blocking" "blocking" WHERE "blocking"."blockeeId" = $17)) AND ("note"."renoteUserId" IS NULL OR "note"."renoteUserId" NOT IN (SELECT "blocking"."blockerId" AS "blocking_blockerId" FROM "blocking" "blocking" WHERE "blocking"."blockeeId" = $18)) AND "note"."fileIds" != $29 AND ($19 = ANY("note"."attachedFileTypes") OR $20 = ANY("note"."attachedFileTypes") OR $21 = ANY("note"."attachedFileTypes") OR $22 = ANY("note"."attachedFileTypes") OR $23 = ANY("note"."attachedFileTypes") OR $24 = ANY("note"."attachedFileTypes") OR $25 = ANY("note"."attachedFileTypes")) AND "note"."cw" IS NULL AND $30 = (SELECT COUNT(*) FROM drive_file df WHERE df.id = ANY(note."fileIds") AND df."isSensitive" = $31)) "distinctAlias" ORDER BY "distinctAlias"."note_id" DESC, "note_id" ASC LIMIT $32 | 0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 11438 | 2843098.093984020 | 0.01945 | 7855.261708 | 248.5660162601850 | 547.1887165416280 | 81943 | 48143287 | 12225075 | 1688 | 5421 | 0 | 0 | 0 | 0 | 0 | 0 | 0.0 | 0.0 | 0.0 | 0.0 | 1817 | 1218 | 8952442 | 197709 | 31733.600407000000 | 2 | 375.01095700000000 | 1330 | 19569.19963200000 | 1330 | 197942.18525700000

userid  dbid    toplevel    queryid query   plans   total_plan_time min_plan_time   max_plan_time   mean_plan_time  stddev_plan_time    calls   total_exec_time min_exec_time   max_exec_time   mean_exec_time  stddev_exec_time    rows    shared_blks_hit shared_blks_read    shared_blks_dirtied shared_blks_written local_blks_hit  local_blks_read local_blks_dirtied  local_blks_written  temp_blks_read  temp_blks_written   blk_read_time   blk_write_time  temp_blk_read_time  temp_blk_write_time wal_records wal_fpi wal_bytes   jit_functions   jit_generation_time jit_inlining_count  jit_inlining_time   jit_optimization_count  jit_optimization_time   jit_emission_count  jit_emission_time
16822   16426   TRUE    -5599249229748355469    SELECT DISTINCT "distinctAlias"."note_id" AS "ids_note_id", "distinctAlias"."note_id" FROM (SELECT "note"."id" AS "note_id", "note"."createdAt" AS "note_createdAt", "note"."replyId" AS "note_replyId", "note"."renoteId" AS "note_renoteId", "note"."threadId" AS "note_threadId", "note"."text" AS "note_text", "note"."name" AS "note_name", "note"."cw" AS "note_cw", "note"."userId" AS "note_userId", "note"."localOnly" AS "note_localOnly", "note"."reactionAcceptance" AS "note_reactionAcceptance", "note"."renoteCount" AS "note_renoteCount", "note"."repliesCount" AS "note_repliesCount", "note"."reactions" AS "note_reactions", "note"."visibility" AS "note_visibility", "note"."uri" AS "note_uri", "note"."url" AS "note_url", "note"."fileIds" AS "note_fileIds", "note"."attachedFileTypes" AS "note_attachedFileTypes", "note"."visibleUserIds" AS "note_visibleUserIds", "note"."mentions" AS "note_mentions", "note"."mentionedRemoteUsers" AS "note_mentionedRemoteUsers", "note"."emojis" AS "note_emojis", "note"."tags" AS "note_tags", "note"."hasPoll" AS "note_hasPoll", "note"."channelId" AS "note_channelId", "note"."userHost" AS "note_userHost", "note"."replyUserId" AS "note_replyUserId", "note"."replyUserHost" AS "note_replyUserHost", "note"."renoteUserId" AS "note_renoteUserId", "note"."renoteUserHost" AS "note_renoteUserHost", "user"."id" AS "user_id", "user"."createdAt" AS "user_createdAt", "user"."updatedAt" AS "user_updatedAt", "user"."lastFetchedAt" AS "user_lastFetchedAt", "user"."lastActiveDate" AS "user_lastActiveDate", "user"."hideOnlineStatus" AS "user_hideOnlineStatus", "user"."username" AS "user_username", "user"."name" AS "user_name", "user"."followersCount" AS "user_followersCount", "user"."followingCount" AS "user_followingCount", "user"."movedToUri" AS "user_movedToUri", "user"."movedAt" AS "user_movedAt", "user"."alsoKnownAs" AS "user_alsoKnownAs", "user"."notesCount" AS "user_notesCount", "user"."avatarId" AS "user_avatarId", "user"."bannerId" AS "user_bannerId", "user"."avatarUrl" AS "user_avatarUrl", "user"."bannerUrl" AS "user_bannerUrl", "user"."avatarBlurhash" AS "user_avatarBlurhash", "user"."bannerBlurhash" AS "user_bannerBlurhash", "user"."tags" AS "user_tags", "user"."isSuspended" AS "user_isSuspended", "user"."isLocked" AS "user_isLocked", "user"."isBot" AS "user_isBot", "user"."isCat" AS "user_isCat", "user"."isRoot" AS "user_isRoot", "user"."isExplorable" AS "user_isExplorable", "user"."isDeleted" AS "user_isDeleted", "user"."emojis" AS "user_emojis", "user"."host" AS "user_host", "user"."inbox" AS "user_inbox", "user"."sharedInbox" AS "user_sharedInbox", "user"."featured" AS "user_featured", "user"."uri" AS "user_uri", "user"."followersUri" AS "user_followersUri", "user"."token" AS "user_token", "reply"."id" AS "reply_id", "reply"."createdAt" AS "reply_createdAt", "reply"."replyId" AS "reply_replyId", "reply"."renoteId" AS "reply_renoteId", "reply"."threadId" AS "reply_threadId", "reply"."text" AS "reply_text", "reply"."name" AS "reply_name", "reply"."cw" AS "reply_cw", "reply"."userId" AS "reply_userId", "reply"."localOnly" AS "reply_localOnly", "reply"."reactionAcceptance" AS "reply_reactionAcceptance", "reply"."renoteCount" AS "reply_renoteCount", "reply"."repliesCount" AS "reply_repliesCount", "reply"."reactions" AS "reply_reactions", "reply"."visibility" AS "reply_visibility", "reply"."uri" AS "reply_uri", "reply"."url" AS "reply_url", "reply"."fileIds" AS "reply_fileIds", "reply"."attachedFileTypes" AS "reply_attachedFileTypes", "reply"."visibleUserIds" AS "reply_visibleUserIds", "reply"."mentions" AS "reply_mentions", "reply"."mentionedRemoteUsers" AS "reply_mentionedRemoteUsers", "reply"."emojis" AS "reply_emojis", "reply"."tags" AS "reply_tags", "reply"."hasPoll" AS "reply_hasPoll", "reply"."channelId" AS "reply_channelId", "reply"."userHost" AS "reply_userHost", "reply"."replyUserId" AS "reply_replyUserId", "reply"."replyUserHost" AS "reply_replyUserHost", "reply"."renoteUserId" AS "reply_renoteUserId", "reply"."renoteUserHost" AS "reply_renoteUserHost", "renote"."id" AS "renote_id", "renote"."createdAt" AS "renote_createdAt", "renote"."replyId" AS "renote_replyId", "renote"."renoteId" AS "renote_renoteId", "renote"."threadId" AS "renote_threadId", "renote"."text" AS "renote_text", "renote"."name" AS "renote_name", "renote"."cw" AS "renote_cw", "renote"."userId" AS "renote_userId", "renote"."localOnly" AS "renote_localOnly", "renote"."reactionAcceptance" AS "renote_reactionAcceptance", "renote"."renoteCount" AS "renote_renoteCount", "renote"."repliesCount" AS "renote_repliesCount", "renote"."reactions" AS "renote_reactions", "renote"."visibility" AS "renote_visibility", "renote"."uri" AS "renote_uri", "renote"."url" AS "renote_url", "renote"."fileIds" AS "renote_fileIds", "renote"."attachedFileTypes" AS "renote_attachedFileTypes", "renote"."visibleUserIds" AS "renote_visibleUserIds", "renote"."mentions" AS "renote_mentions", "renote"."mentionedRemoteUsers" AS "renote_mentionedRemoteUsers", "renote"."emojis" AS "renote_emojis", "renote"."tags" AS "renote_tags", "renote"."hasPoll" AS "renote_hasPoll", "renote"."channelId" AS "renote_channelId", "renote"."userHost" AS "renote_userHost", "renote"."replyUserId" AS "renote_replyUserId", "renote"."replyUserHost" AS "renote_replyUserHost", "renote"."renoteUserId" AS "renote_renoteUserId", "renote"."renoteUserHost" AS "renote_renoteUserHost", "replyUser"."id" AS "replyUser_id", "replyUser"."createdAt" AS "replyUser_createdAt", "replyUser"."updatedAt" AS "replyUser_updatedAt", "replyUser"."lastFetchedAt" AS "replyUser_lastFetchedAt", "replyUser"."lastActiveDate" AS "replyUser_lastActiveDate", "replyUser"."hideOnlineStatus" AS "replyUser_hideOnlineStatus", "replyUser"."username" AS "replyUser_username", "replyUser"."name" AS "replyUser_name", "replyUser"."followersCount" AS "replyUser_followersCount", "replyUser"."followingCount" AS "replyUser_followingCount", "replyUser"."movedToUri" AS "replyUser_movedToUri", "replyUser"."movedAt" AS "replyUser_movedAt", "replyUser"."alsoKnownAs" AS "replyUser_alsoKnownAs", "replyUser"."notesCount" AS "replyUser_notesCount", "replyUser"."avatarId" AS "replyUser_avatarId", "replyUser"."bannerId" AS "replyUser_bannerId", "replyUser"."avatarUrl" AS "replyUser_avatarUrl", "replyUser"."bannerUrl" AS "replyUser_bannerUrl", "replyUser"."avatarBlurhash" AS "replyUser_avatarBlurhash", "replyUser"."bannerBlurhash" AS "replyUser_bannerBlurhash", "replyUser"."tags" AS "replyUser_tags", "replyUser"."isSuspended" AS "replyUser_isSuspended", "replyUser"."isLocked" AS "replyUser_isLocked", "replyUser"."isBot" AS "replyUser_isBot", "replyUser"."isCat" AS "replyUser_isCat", "replyUser"."isRoot" AS "replyUser_isRoot", "replyUser"."isExplorable" AS "replyUser_isExplorable", "replyUser"."isDeleted" AS "replyUser_isDeleted", "replyUser"."emojis" AS "replyUser_emojis", "replyUser"."host" AS "replyUser_host", "replyUser"."inbox" AS "replyUser_inbox", "replyUser"."sharedInbox" AS "replyUser_sharedInbox", "replyUser"."featured" AS "replyUser_featured", "replyUser"."uri" AS "replyUser_uri", "replyUser"."followersUri" AS "replyUser_followersUri", "replyUser"."token" AS "replyUser_token", "renoteUser"."id" AS "renoteUser_id", "renoteUser"."createdAt" AS "renoteUser_createdAt", "renoteUser"."updatedAt" AS "renoteUser_updatedAt", "renoteUser"."lastFetchedAt" AS "renoteUser_lastFetchedAt", "renoteUser"."lastActiveDate" AS "renoteUser_lastActiveDate", "renoteUser"."hideOnlineStatus" AS "renoteUser_hideOnlineStatus", "renoteUser"."username" AS "renoteUser_username", "renoteUser"."name" AS "renoteUser_name", "renoteUser"."followersCount" AS "renoteUser_followersCount", "renoteUser"."followingCount" AS "renoteUser_followingCount", "renoteUser"."movedToUri" AS "renoteUser_movedToUri", "renoteUser"."movedAt" AS "renoteUser_movedAt", "renoteUser"."alsoKnownAs" AS "renoteUser_alsoKnownAs", "renoteUser"."notesCount" AS "renoteUser_notesCount", "renoteUser"."avatarId" AS "renoteUser_avatarId", "renoteUser"."bannerId" AS "renoteUser_bannerId", "renoteUser"."avatarUrl" AS "renoteUser_avatarUrl", "renoteUser"."bannerUrl" AS "renoteUser_bannerUrl", "renoteUser"."avatarBlurhash" AS "renoteUser_avatarBlurhash", "renoteUser"."bannerBlurhash" AS "renoteUser_bannerBlurhash", "renoteUser"."tags" AS "renoteUser_tags", "renoteUser"."isSuspended" AS "renoteUser_isSuspended", "renoteUser"."isLocked" AS "renoteUser_isLocked", "renoteUser"."isBot" AS "renoteUser_isBot", "renoteUser"."isCat" AS "renoteUser_isCat", "renoteUser"."isRoot" AS "renoteUser_isRoot", "renoteUser"."isExplorable" AS "renoteUser_isExplorable", "renoteUser"."isDeleted" AS "renoteUser_isDeleted", "renoteUser"."emojis" AS "renoteUser_emojis", "renoteUser"."host" AS "renoteUser_host", "renoteUser"."inbox" AS "renoteUser_inbox", "renoteUser"."sharedInbox" AS "renoteUser_sharedInbox", "renoteUser"."featured" AS "renoteUser_featured", "renoteUser"."uri" AS "renoteUser_uri", "renoteUser"."followersUri" AS "renoteUser_followersUri", "renoteUser"."token" AS "renoteUser_token" FROM "note" "note" INNER JOIN "user" "user" ON "user"."id"="note"."userId"  LEFT JOIN "note" "reply" ON "reply"."id"="note"."replyId"  LEFT JOIN "note" "renote" ON "renote"."id"="note"."renoteId"  LEFT JOIN "user" "replyUser" ON "replyUser"."id"="reply"."userId"  LEFT JOIN "user" "renoteUser" ON "renoteUser"."id"="renote"."userId" WHERE "note"."id" < $1 AND "note"."userId" = $2 AND ("note"."visibility" = $3 OR "note"."visibility" = $4)) "distinctAlias" ORDER BY "distinctAlias"."note_id" DESC, "note_id" ASC LIMIT $5  0   0.0 0.0 0.0 0.0 0.0 835 195447.5877150000   0.048698    60334.023031000000  234.06896732335300  2602.273461907280   15726   17317624    1163440 1039    69  0   0   0   0   0   0   0.0 0.0 0.0 0.0 1098    918 6695730 0   0.0 0   0.0 0   0.0 0   0.0
16822   16426   TRUE    6047802554448485168 SELECT DISTINCT "distinctAlias"."note_id" AS "ids_note_id", "distinctAlias"."note_id" FROM (SELECT "note"."id" AS "note_id", "note"."createdAt" AS "note_createdAt", "note"."replyId" AS "note_replyId", "note"."renoteId" AS "note_renoteId", "note"."threadId" AS "note_threadId", "note"."text" AS "note_text", "note"."name" AS "note_name", "note"."cw" AS "note_cw", "note"."userId" AS "note_userId", "note"."localOnly" AS "note_localOnly", "note"."reactionAcceptance" AS "note_reactionAcceptance", "note"."renoteCount" AS "note_renoteCount", "note"."repliesCount" AS "note_repliesCount", "note"."reactions" AS "note_reactions", "note"."visibility" AS "note_visibility", "note"."uri" AS "note_uri", "note"."url" AS "note_url", "note"."fileIds" AS "note_fileIds", "note"."attachedFileTypes" AS "note_attachedFileTypes", "note"."visibleUserIds" AS "note_visibleUserIds", "note"."mentions" AS "note_mentions", "note"."mentionedRemoteUsers" AS "note_mentionedRemoteUsers", "note"."emojis" AS "note_emojis", "note"."tags" AS "note_tags", "note"."hasPoll" AS "note_hasPoll", "note"."channelId" AS "note_channelId", "note"."userHost" AS "note_userHost", "note"."replyUserId" AS "note_replyUserId", "note"."replyUserHost" AS "note_replyUserHost", "note"."renoteUserId" AS "note_renoteUserId", "note"."renoteUserHost" AS "note_renoteUserHost", "user"."id" AS "user_id", "user"."createdAt" AS "user_createdAt", "user"."updatedAt" AS "user_updatedAt", "user"."lastFetchedAt" AS "user_lastFetchedAt", "user"."lastActiveDate" AS "user_lastActiveDate", "user"."hideOnlineStatus" AS "user_hideOnlineStatus", "user"."username" AS "user_username", "user"."name" AS "user_name", "user"."followersCount" AS "user_followersCount", "user"."followingCount" AS "user_followingCount", "user"."movedToUri" AS "user_movedToUri", "user"."movedAt" AS "user_movedAt", "user"."alsoKnownAs" AS "user_alsoKnownAs", "user"."notesCount" AS "user_notesCount", "user"."avatarId" AS "user_avatarId", "user"."bannerId" AS "user_bannerId", "user"."avatarUrl" AS "user_avatarUrl", "user"."bannerUrl" AS "user_bannerUrl", "user"."avatarBlurhash" AS "user_avatarBlurhash", "user"."bannerBlurhash" AS "user_bannerBlurhash", "user"."tags" AS "user_tags", "user"."isSuspended" AS "user_isSuspended", "user"."isLocked" AS "user_isLocked", "user"."isBot" AS "user_isBot", "user"."isCat" AS "user_isCat", "user"."isRoot" AS "user_isRoot", "user"."isExplorable" AS "user_isExplorable", "user"."isDeleted" AS "user_isDeleted", "user"."emojis" AS "user_emojis", "user"."host" AS "user_host", "user"."inbox" AS "user_inbox", "user"."sharedInbox" AS "user_sharedInbox", "user"."featured" AS "user_featured", "user"."uri" AS "user_uri", "user"."followersUri" AS "user_followersUri", "user"."token" AS "user_token", "reply"."id" AS "reply_id", "reply"."createdAt" AS "reply_createdAt", "reply"."replyId" AS "reply_replyId", "reply"."renoteId" AS "reply_renoteId", "reply"."threadId" AS "reply_threadId", "reply"."text" AS "reply_text", "reply"."name" AS "reply_name", "reply"."cw" AS "reply_cw", "reply"."userId" AS "reply_userId", "reply"."localOnly" AS "reply_localOnly", "reply"."reactionAcceptance" AS "reply_reactionAcceptance", "reply"."renoteCount" AS "reply_renoteCount", "reply"."repliesCount" AS "reply_repliesCount", "reply"."reactions" AS "reply_reactions", "reply"."visibility" AS "reply_visibility", "reply"."uri" AS "reply_uri", "reply"."url" AS "reply_url", "reply"."fileIds" AS "reply_fileIds", "reply"."attachedFileTypes" AS "reply_attachedFileTypes", "reply"."visibleUserIds" AS "reply_visibleUserIds", "reply"."mentions" AS "reply_mentions", "reply"."mentionedRemoteUsers" AS "reply_mentionedRemoteUsers", "reply"."emojis" AS "reply_emojis", "reply"."tags" AS "reply_tags", "reply"."hasPoll" AS "reply_hasPoll", "reply"."channelId" AS "reply_channelId", "reply"."userHost" AS "reply_userHost", "reply"."replyUserId" AS "reply_replyUserId", "reply"."replyUserHost" AS "reply_replyUserHost", "reply"."renoteUserId" AS "reply_renoteUserId", "reply"."renoteUserHost" AS "reply_renoteUserHost", "renote"."id" AS "renote_id", "renote"."createdAt" AS "renote_createdAt", "renote"."replyId" AS "renote_replyId", "renote"."renoteId" AS "renote_renoteId", "renote"."threadId" AS "renote_threadId", "renote"."text" AS "renote_text", "renote"."name" AS "renote_name", "renote"."cw" AS "renote_cw", "renote"."userId" AS "renote_userId", "renote"."localOnly" AS "renote_localOnly", "renote"."reactionAcceptance" AS "renote_reactionAcceptance", "renote"."renoteCount" AS "renote_renoteCount", "renote"."repliesCount" AS "renote_repliesCount", "renote"."reactions" AS "renote_reactions", "renote"."visibility" AS "renote_visibility", "renote"."uri" AS "renote_uri", "renote"."url" AS "renote_url", "renote"."fileIds" AS "renote_fileIds", "renote"."attachedFileTypes" AS "renote_attachedFileTypes", "renote"."visibleUserIds" AS "renote_visibleUserIds", "renote"."mentions" AS "renote_mentions", "renote"."mentionedRemoteUsers" AS "renote_mentionedRemoteUsers", "renote"."emojis" AS "renote_emojis", "renote"."tags" AS "renote_tags", "renote"."hasPoll" AS "renote_hasPoll", "renote"."channelId" AS "renote_channelId", "renote"."userHost" AS "renote_userHost", "renote"."replyUserId" AS "renote_replyUserId", "renote"."replyUserHost" AS "renote_replyUserHost", "renote"."renoteUserId" AS "renote_renoteUserId", "renote"."renoteUserHost" AS "renote_renoteUserHost", "replyUser"."id" AS "replyUser_id", "replyUser"."createdAt" AS "replyUser_createdAt", "replyUser"."updatedAt" AS "replyUser_updatedAt", "replyUser"."lastFetchedAt" AS "replyUser_lastFetchedAt", "replyUser"."lastActiveDate" AS "replyUser_lastActiveDate", "replyUser"."hideOnlineStatus" AS "replyUser_hideOnlineStatus", "replyUser"."username" AS "replyUser_username", "replyUser"."name" AS "replyUser_name", "replyUser"."followersCount" AS "replyUser_followersCount", "replyUser"."followingCount" AS "replyUser_followingCount", "replyUser"."movedToUri" AS "replyUser_movedToUri", "replyUser"."movedAt" AS "replyUser_movedAt", "replyUser"."alsoKnownAs" AS "replyUser_alsoKnownAs", "replyUser"."notesCount" AS "replyUser_notesCount", "replyUser"."avatarId" AS "replyUser_avatarId", "replyUser"."bannerId" AS "replyUser_bannerId", "replyUser"."avatarUrl" AS "replyUser_avatarUrl", "replyUser"."bannerUrl" AS "replyUser_bannerUrl", "replyUser"."avatarBlurhash" AS "replyUser_avatarBlurhash", "replyUser"."bannerBlurhash" AS "replyUser_bannerBlurhash", "replyUser"."tags" AS "replyUser_tags", "replyUser"."isSuspended" AS "replyUser_isSuspended", "replyUser"."isLocked" AS "replyUser_isLocked", "replyUser"."isBot" AS "replyUser_isBot", "replyUser"."isCat" AS "replyUser_isCat", "replyUser"."isRoot" AS "replyUser_isRoot", "replyUser"."isExplorable" AS "replyUser_isExplorable", "replyUser"."isDeleted" AS "replyUser_isDeleted", "replyUser"."emojis" AS "replyUser_emojis", "replyUser"."host" AS "replyUser_host", "replyUser"."inbox" AS "replyUser_inbox", "replyUser"."sharedInbox" AS "replyUser_sharedInbox", "replyUser"."featured" AS "replyUser_featured", "replyUser"."uri" AS "replyUser_uri", "replyUser"."followersUri" AS "replyUser_followersUri", "replyUser"."token" AS "replyUser_token", "renoteUser"."id" AS "renoteUser_id", "renoteUser"."createdAt" AS "renoteUser_createdAt", "renoteUser"."updatedAt" AS "renoteUser_updatedAt", "renoteUser"."lastFetchedAt" AS "renoteUser_lastFetchedAt", "renoteUser"."lastActiveDate" AS "renoteUser_lastActiveDate", "renoteUser"."hideOnlineStatus" AS "renoteUser_hideOnlineStatus", "renoteUser"."username" AS "renoteUser_username", "renoteUser"."name" AS "renoteUser_name", "renoteUser"."followersCount" AS "renoteUser_followersCount", "renoteUser"."followingCount" AS "renoteUser_followingCount", "renoteUser"."movedToUri" AS "renoteUser_movedToUri", "renoteUser"."movedAt" AS "renoteUser_movedAt", "renoteUser"."alsoKnownAs" AS "renoteUser_alsoKnownAs", "renoteUser"."notesCount" AS "renoteUser_notesCount", "renoteUser"."avatarId" AS "renoteUser_avatarId", "renoteUser"."bannerId" AS "renoteUser_bannerId", "renoteUser"."avatarUrl" AS "renoteUser_avatarUrl", "renoteUser"."bannerUrl" AS "renoteUser_bannerUrl", "renoteUser"."avatarBlurhash" AS "renoteUser_avatarBlurhash", "renoteUser"."bannerBlurhash" AS "renoteUser_bannerBlurhash", "renoteUser"."tags" AS "renoteUser_tags", "renoteUser"."isSuspended" AS "renoteUser_isSuspended", "renoteUser"."isLocked" AS "renoteUser_isLocked", "renoteUser"."isBot" AS "renoteUser_isBot", "renoteUser"."isCat" AS "renoteUser_isCat", "renoteUser"."isRoot" AS "renoteUser_isRoot", "renoteUser"."isExplorable" AS "renoteUser_isExplorable", "renoteUser"."isDeleted" AS "renoteUser_isDeleted", "renoteUser"."emojis" AS "renoteUser_emojis", "renoteUser"."host" AS "renoteUser_host", "renoteUser"."inbox" AS "renoteUser_inbox", "renoteUser"."sharedInbox" AS "renoteUser_sharedInbox", "renoteUser"."featured" AS "renoteUser_featured", "renoteUser"."uri" AS "renoteUser_uri", "renoteUser"."followersUri" AS "renoteUser_followersUri", "renoteUser"."token" AS "renoteUser_token" FROM "note" "note" INNER JOIN "user_list_joining" "userListJoining" ON "userListJoining"."userId" = "note"."userId"  INNER JOIN "user" "user" ON "user"."id"="note"."userId"  LEFT JOIN "note" "reply" ON "reply"."id"="note"."replyId"  LEFT JOIN "note" "renote" ON "renote"."id"="note"."renoteId"  LEFT JOIN "user" "replyUser" ON "replyUser"."id"="reply"."userId"  LEFT JOIN "user" "renoteUser" ON "renoteUser"."id"="renote"."userId" WHERE "userListJoining"."userListId" = $1 AND (("note"."visibility" = $7 OR "note"."visibility" = $8) OR "note"."userId" = $2 OR $3 = ANY("note"."visibleUserIds") OR $4 = ANY("note"."mentions") OR ("note"."visibility" = $9 AND ("note"."userId" IN (SELECT "following"."followeeId" AS "following_followeeId" FROM "following" "following" WHERE "following"."followerId" = $5) OR "note"."replyUserId" = $6)))) "distinctAlias" ORDER BY "distinctAlias"."note_id" DESC, "note_id" ASC LIMIT $10  0   0.0 0.0 0.0 0.0 0.0 2405    1155895.4092980000  0.03266 47591.22705 480.6217918079010   1349.8401904937000  24362   24448039    7372857 1662    5848    0   0   0   0   0   0   0.0 0.0 0.0 0.0 2518    1435    10378057    0   0.0 0   0.0 0   0.0 0   0.0
16822   16426   TRUE    -4295012842788197408    SELECT DISTINCT "distinctAlias"."reaction_id" AS "ids_reaction_id", "distinctAlias"."reaction_id" FROM (SELECT "reaction"."id" AS "reaction_id", "reaction"."createdAt" AS "reaction_createdAt", "reaction"."userId" AS "reaction_userId", "reaction"."noteId" AS "reaction_noteId", "reaction"."reaction" AS "reaction_reaction", "note"."id" AS "note_id", "note"."createdAt" AS "note_createdAt", "note"."replyId" AS "note_replyId", "note"."renoteId" AS "note_renoteId", "note"."threadId" AS "note_threadId", "note"."text" AS "note_text", "note"."name" AS "note_name", "note"."cw" AS "note_cw", "note"."userId" AS "note_userId", "note"."localOnly" AS "note_localOnly", "note"."reactionAcceptance" AS "note_reactionAcceptance", "note"."renoteCount" AS "note_renoteCount", "note"."repliesCount" AS "note_repliesCount", "note"."reactions" AS "note_reactions", "note"."visibility" AS "note_visibility", "note"."uri" AS "note_uri", "note"."url" AS "note_url", "note"."fileIds" AS "note_fileIds", "note"."attachedFileTypes" AS "note_attachedFileTypes", "note"."visibleUserIds" AS "note_visibleUserIds", "note"."mentions" AS "note_mentions", "note"."mentionedRemoteUsers" AS "note_mentionedRemoteUsers", "note"."emojis" AS "note_emojis", "note"."tags" AS "note_tags", "note"."hasPoll" AS "note_hasPoll", "note"."channelId" AS "note_channelId", "note"."userHost" AS "note_userHost", "note"."replyUserId" AS "note_replyUserId", "note"."replyUserHost" AS "note_replyUserHost", "note"."renoteUserId" AS "note_renoteUserId", "note"."renoteUserHost" AS "note_renoteUserHost" FROM "note_reaction" "reaction" LEFT JOIN "note" "note" ON "note"."id"="reaction"."noteId" WHERE "reaction"."userId" = $1 AND ("note"."visibility" = $2 OR "note"."visibility" = $3)) "distinctAlias" ORDER BY "distinctAlias"."reaction_id" DESC, "reaction_id" ASC LIMIT $4 0   0.0 0.0 0.0 0.0 0.0 38  109068.08901100000  1.266135    37117.411897    2870.212868710530   7575.171793860580   660 36941666    794634  2714    465 0   0   0   0   0   0   0.0 0.0 0.0 0.0 2560    2485    18471909    0   0.0 0   0.0 0   0.0 0   0.0
16822   16426   TRUE    -1765600823722344336    SELECT DISTINCT "distinctAlias"."note_id" AS "ids_note_id", "distinctAlias"."note_id" FROM (SELECT "note"."id" AS "note_id", "note"."createdAt" AS "note_createdAt", "note"."replyId" AS "note_replyId", "note"."renoteId" AS "note_renoteId", "note"."threadId" AS "note_threadId", "note"."text" AS "note_text", "note"."name" AS "note_name", "note"."cw" AS "note_cw", "note"."userId" AS "note_userId", "note"."localOnly" AS "note_localOnly", "note"."reactionAcceptance" AS "note_reactionAcceptance", "note"."renoteCount" AS "note_renoteCount", "note"."repliesCount" AS "note_repliesCount", "note"."reactions" AS "note_reactions", "note"."visibility" AS "note_visibility", "note"."uri" AS "note_uri", "note"."url" AS "note_url", "note"."fileIds" AS "note_fileIds", "note"."attachedFileTypes" AS "note_attachedFileTypes", "note"."visibleUserIds" AS "note_visibleUserIds", "note"."mentions" AS "note_mentions", "note"."mentionedRemoteUsers" AS "note_mentionedRemoteUsers", "note"."emojis" AS "note_emojis", "note"."tags" AS "note_tags", "note"."hasPoll" AS "note_hasPoll", "note"."channelId" AS "note_channelId", "note"."userHost" AS "note_userHost", "note"."replyUserId" AS "note_replyUserId", "note"."replyUserHost" AS "note_replyUserHost", "note"."renoteUserId" AS "note_renoteUserId", "note"."renoteUserHost" AS "note_renoteUserHost", "user"."id" AS "user_id", "user"."createdAt" AS "user_createdAt", "user"."updatedAt" AS "user_updatedAt", "user"."lastFetchedAt" AS "user_lastFetchedAt", "user"."lastActiveDate" AS "user_lastActiveDate", "user"."hideOnlineStatus" AS "user_hideOnlineStatus", "user"."username" AS "user_username", "user"."name" AS "user_name", "user"."followersCount" AS "user_followersCount", "user"."followingCount" AS "user_followingCount", "user"."movedToUri" AS "user_movedToUri", "user"."movedAt" AS "user_movedAt", "user"."alsoKnownAs" AS "user_alsoKnownAs", "user"."notesCount" AS "user_notesCount", "user"."avatarId" AS "user_avatarId", "user"."bannerId" AS "user_bannerId", "user"."avatarUrl" AS "user_avatarUrl", "user"."bannerUrl" AS "user_bannerUrl", "user"."avatarBlurhash" AS "user_avatarBlurhash", "user"."bannerBlurhash" AS "user_bannerBlurhash", "user"."tags" AS "user_tags", "user"."isSuspended" AS "user_isSuspended", "user"."isLocked" AS "user_isLocked", "user"."isBot" AS "user_isBot", "user"."isCat" AS "user_isCat", "user"."isRoot" AS "user_isRoot", "user"."isExplorable" AS "user_isExplorable", "user"."isDeleted" AS "user_isDeleted", "user"."emojis" AS "user_emojis", "user"."host" AS "user_host", "user"."inbox" AS "user_inbox", "user"."sharedInbox" AS "user_sharedInbox", "user"."featured" AS "user_featured", "user"."uri" AS "user_uri", "user"."followersUri" AS "user_followersUri", "user"."token" AS "user_token", "reply"."id" AS "reply_id", "reply"."createdAt" AS "reply_createdAt", "reply"."replyId" AS "reply_replyId", "reply"."renoteId" AS "reply_renoteId", "reply"."threadId" AS "reply_threadId", "reply"."text" AS "reply_text", "reply"."name" AS "reply_name", "reply"."cw" AS "reply_cw", "reply"."userId" AS "reply_userId", "reply"."localOnly" AS "reply_localOnly", "reply"."reactionAcceptance" AS "reply_reactionAcceptance", "reply"."renoteCount" AS "reply_renoteCount", "reply"."repliesCount" AS "reply_repliesCount", "reply"."reactions" AS "reply_reactions", "reply"."visibility" AS "reply_visibility", "reply"."uri" AS "reply_uri", "reply"."url" AS "reply_url", "reply"."fileIds" AS "reply_fileIds", "reply"."attachedFileTypes" AS "reply_attachedFileTypes", "reply"."visibleUserIds" AS "reply_visibleUserIds", "reply"."mentions" AS "reply_mentions", "reply"."mentionedRemoteUsers" AS "reply_mentionedRemoteUsers", "reply"."emojis" AS "reply_emojis", "reply"."tags" AS "reply_tags", "reply"."hasPoll" AS "reply_hasPoll", "reply"."channelId" AS "reply_channelId", "reply"."userHost" AS "reply_userHost", "reply"."replyUserId" AS "reply_replyUserId", "reply"."replyUserHost" AS "reply_replyUserHost", "reply"."renoteUserId" AS "reply_renoteUserId", "reply"."renoteUserHost" AS "reply_renoteUserHost", "renote"."id" AS "renote_id", "renote"."createdAt" AS "renote_createdAt", "renote"."replyId" AS "renote_replyId", "renote"."renoteId" AS "renote_renoteId", "renote"."threadId" AS "renote_threadId", "renote"."text" AS "renote_text", "renote"."name" AS "renote_name", "renote"."cw" AS "renote_cw", "renote"."userId" AS "renote_userId", "renote"."localOnly" AS "renote_localOnly", "renote"."reactionAcceptance" AS "renote_reactionAcceptance", "renote"."renoteCount" AS "renote_renoteCount", "renote"."repliesCount" AS "renote_repliesCount", "renote"."reactions" AS "renote_reactions", "renote"."visibility" AS "renote_visibility", "renote"."uri" AS "renote_uri", "renote"."url" AS "renote_url", "renote"."fileIds" AS "renote_fileIds", "renote"."attachedFileTypes" AS "renote_attachedFileTypes", "renote"."visibleUserIds" AS "renote_visibleUserIds", "renote"."mentions" AS "renote_mentions", "renote"."mentionedRemoteUsers" AS "renote_mentionedRemoteUsers", "renote"."emojis" AS "renote_emojis", "renote"."tags" AS "renote_tags", "renote"."hasPoll" AS "renote_hasPoll", "renote"."channelId" AS "renote_channelId", "renote"."userHost" AS "renote_userHost", "renote"."replyUserId" AS "renote_replyUserId", "renote"."replyUserHost" AS "renote_replyUserHost", "renote"."renoteUserId" AS "renote_renoteUserId", "renote"."renoteUserHost" AS "renote_renoteUserHost", "replyUser"."id" AS "replyUser_id", "replyUser"."createdAt" AS "replyUser_createdAt", "replyUser"."updatedAt" AS "replyUser_updatedAt", "replyUser"."lastFetchedAt" AS "replyUser_lastFetchedAt", "replyUser"."lastActiveDate" AS "replyUser_lastActiveDate", "replyUser"."hideOnlineStatus" AS "replyUser_hideOnlineStatus", "replyUser"."username" AS "replyUser_username", "replyUser"."name" AS "replyUser_name", "replyUser"."followersCount" AS "replyUser_followersCount", "replyUser"."followingCount" AS "replyUser_followingCount", "replyUser"."movedToUri" AS "replyUser_movedToUri", "replyUser"."movedAt" AS "replyUser_movedAt", "replyUser"."alsoKnownAs" AS "replyUser_alsoKnownAs", "replyUser"."notesCount" AS "replyUser_notesCount", "replyUser"."avatarId" AS "replyUser_avatarId", "replyUser"."bannerId" AS "replyUser_bannerId", "replyUser"."avatarUrl" AS "replyUser_avatarUrl", "replyUser"."bannerUrl" AS "replyUser_bannerUrl", "replyUser"."avatarBlurhash" AS "replyUser_avatarBlurhash", "replyUser"."bannerBlurhash" AS "replyUser_bannerBlurhash", "replyUser"."tags" AS "replyUser_tags", "replyUser"."isSuspended" AS "replyUser_isSuspended", "replyUser"."isLocked" AS "replyUser_isLocked", "replyUser"."isBot" AS "replyUser_isBot", "replyUser"."isCat" AS "replyUser_isCat", "replyUser"."isRoot" AS "replyUser_isRoot", "replyUser"."isExplorable" AS "replyUser_isExplorable", "replyUser"."isDeleted" AS "replyUser_isDeleted", "replyUser"."emojis" AS "replyUser_emojis", "replyUser"."host" AS "replyUser_host", "replyUser"."inbox" AS "replyUser_inbox", "replyUser"."sharedInbox" AS "replyUser_sharedInbox", "replyUser"."featured" AS "replyUser_featured", "replyUser"."uri" AS "replyUser_uri", "replyUser"."followersUri" AS "replyUser_followersUri", "replyUser"."token" AS "replyUser_token", "renoteUser"."id" AS "renoteUser_id", "renoteUser"."createdAt" AS "renoteUser_createdAt", "renoteUser"."updatedAt" AS "renoteUser_updatedAt", "renoteUser"."lastFetchedAt" AS "renoteUser_lastFetchedAt", "renoteUser"."lastActiveDate" AS "renoteUser_lastActiveDate", "renoteUser"."hideOnlineStatus" AS "renoteUser_hideOnlineStatus", "renoteUser"."username" AS "renoteUser_username", "renoteUser"."name" AS "renoteUser_name", "renoteUser"."followersCount" AS "renoteUser_followersCount", "renoteUser"."followingCount" AS "renoteUser_followingCount", "renoteUser"."movedToUri" AS "renoteUser_movedToUri", "renoteUser"."movedAt" AS "renoteUser_movedAt", "renoteUser"."alsoKnownAs" AS "renoteUser_alsoKnownAs", "renoteUser"."notesCount" AS "renoteUser_notesCount", "renoteUser"."avatarId" AS "renoteUser_avatarId", "renoteUser"."bannerId" AS "renoteUser_bannerId", "renoteUser"."avatarUrl" AS "renoteUser_avatarUrl", "renoteUser"."bannerUrl" AS "renoteUser_bannerUrl", "renoteUser"."avatarBlurhash" AS "renoteUser_avatarBlurhash", "renoteUser"."bannerBlurhash" AS "renoteUser_bannerBlurhash", "renoteUser"."tags" AS "renoteUser_tags", "renoteUser"."isSuspended" AS "renoteUser_isSuspended", "renoteUser"."isLocked" AS "renoteUser_isLocked", "renoteUser"."isBot" AS "renoteUser_isBot", "renoteUser"."isCat" AS "renoteUser_isCat", "renoteUser"."isRoot" AS "renoteUser_isRoot", "renoteUser"."isExplorable" AS "renoteUser_isExplorable", "renoteUser"."isDeleted" AS "renoteUser_isDeleted", "renoteUser"."emojis" AS "renoteUser_emojis", "renoteUser"."host" AS "renoteUser_host", "renoteUser"."inbox" AS "renoteUser_inbox", "renoteUser"."sharedInbox" AS "renoteUser_sharedInbox", "renoteUser"."featured" AS "renoteUser_featured", "renoteUser"."uri" AS "renoteUser_uri", "renoteUser"."followersUri" AS "renoteUser_followersUri", "renoteUser"."token" AS "renoteUser_token" FROM "note" "note" INNER JOIN "user" "user" ON "user"."id"="note"."userId"  LEFT JOIN "note" "reply" ON "reply"."id"="note"."replyId"  LEFT JOIN "note" "renote" ON "renote"."id"="note"."renoteId"  LEFT JOIN "user" "replyUser" ON "replyUser"."id"="reply"."userId"  LEFT JOIN "user" "renoteUser" ON "renoteUser"."id"="renote"."userId" WHERE "note"."id" > $1 AND "note"."userId" = $2 AND ("note"."visibility" = $3 OR "note"."visibility" = $4)) "distinctAlias" ORDER BY "distinctAlias"."note_id" ASC, "note_id" ASC LIMIT $5   0   0.0 0.0 0.0 0.0 0.0 280 86080.47453400000   0.026333    28175.532895    307.4302661928570   2489.899267513270   934 8923005 608268  2080    351 0   0   0   0   0   0   0.0 0.0 0.0 0.0 2155    1993    14337277    0   0.0 0   0.0 0   0.0 0   0.0
16822   16426   TRUE    1654036986644845719 SELECT COUNT($1) AS "cnt" FROM "note" "Note" WHERE (NOT("Note"."userHost" IS NULL)) 0   0.0 0.0 0.0 0.0 0.0 1   25877.970488    25877.970488    25877.970488    25877.970488    0.0 1   1151161 696734  2430    609 0   0   0   0   0   0   0.0 0.0 0.0 0.0 2287    2272    14826898    5   0.496294    0   0.0 1   0.462121    1   18.538977
16822   16426   TRUE    -7540922400907630251    SELECT DISTINCT "distinctAlias"."reaction_id" AS "ids_reaction_id", "distinctAlias"."reaction_id" FROM (SELECT "reaction"."id" AS "reaction_id", "reaction"."createdAt" AS "reaction_createdAt", "reaction"."userId" AS "reaction_userId", "reaction"."noteId" AS "reaction_noteId", "reaction"."reaction" AS "reaction_reaction", "note"."id" AS "note_id", "note"."createdAt" AS "note_createdAt", "note"."replyId" AS "note_replyId", "note"."renoteId" AS "note_renoteId", "note"."threadId" AS "note_threadId", "note"."text" AS "note_text", "note"."name" AS "note_name", "note"."cw" AS "note_cw", "note"."userId" AS "note_userId", "note"."localOnly" AS "note_localOnly", "note"."reactionAcceptance" AS "note_reactionAcceptance", "note"."renoteCount" AS "note_renoteCount", "note"."repliesCount" AS "note_repliesCount", "note"."reactions" AS "note_reactions", "note"."visibility" AS "note_visibility", "note"."uri" AS "note_uri", "note"."url" AS "note_url", "note"."fileIds" AS "note_fileIds", "note"."attachedFileTypes" AS "note_attachedFileTypes", "note"."visibleUserIds" AS "note_visibleUserIds", "note"."mentions" AS "note_mentions", "note"."mentionedRemoteUsers" AS "note_mentionedRemoteUsers", "note"."emojis" AS "note_emojis", "note"."tags" AS "note_tags", "note"."hasPoll" AS "note_hasPoll", "note"."channelId" AS "note_channelId", "note"."userHost" AS "note_userHost", "note"."replyUserId" AS "note_replyUserId", "note"."replyUserHost" AS "note_replyUserHost", "note"."renoteUserId" AS "note_renoteUserId", "note"."renoteUserHost" AS "note_renoteUserHost" FROM "note_reaction" "reaction" LEFT JOIN "note" "note" ON "note"."id"="reaction"."noteId" WHERE "reaction"."userId" = $1 AND (("note"."visibility" = $7 OR "note"."visibility" = $8) OR "note"."userId" = $2 OR $3 = ANY("note"."visibleUserIds") OR $4 = ANY("note"."mentions") OR ("note"."visibility" = $9 AND ("note"."userId" IN (SELECT "following"."followeeId" AS "following_followeeId" FROM "following" "following" WHERE "following"."followerId" = $5) OR "note"."replyUserId" = $6)))) "distinctAlias" ORDER BY "distinctAlias"."reaction_id" DESC, "reaction_id" ASC LIMIT $10 0   0.0 0.0 0.0 0.0 0.0 130 616736.6207930000   0.5771040000000000  18576.845245    4744.127852253850   7238.885784631330   1948    283590723   5302448 3427    3126    0   0   0   0   0   0   0.0 0.0 0.0 0.0 2935    1861    13533311    0   0.0 0   0.0 0   0.0 0   0.0
16822   16426   TRUE    -2691487539323277329    SELECT "NoteUnread"."id" AS "NoteUnread_id", "NoteUnread"."userId" AS "NoteUnread_userId", "NoteUnread"."noteId" AS "NoteUnread_noteId", "NoteUnread"."isMentioned" AS "NoteUnread_isMentioned", "NoteUnread"."isSpecified" AS "NoteUnread_isSpecified", "NoteUnread"."noteUserId" AS "NoteUnread_noteUserId", "NoteUnread"."noteChannelId" AS "NoteUnread_noteChannelId" FROM "note_unread" "NoteUnread" WHERE ("NoteUnread"."noteChannelId" = $1 AND "NoteUnread"."userId" = $2) LIMIT $3 0   0.0 0.0 0.0 0.0 0.0 158135  10848611.660474000  0.007074    15160.238492    68.60348221755920   657.2720886558900   49756   67887204    38799457    118785  34243   0   0   0   0   0   0   0.0 0.0 0.0 0.0 158537  110504  858707672   0   0.0 0   0.0 0   0.0 0   0.0
16822   16426   TRUE    -6004942123678083980    SELECT DISTINCT "distinctAlias"."reaction_id" AS "ids_reaction_id", "distinctAlias"."reaction_id" FROM (SELECT "reaction"."id" AS "reaction_id", "reaction"."createdAt" AS "reaction_createdAt", "reaction"."userId" AS "reaction_userId", "reaction"."noteId" AS "reaction_noteId", "reaction"."reaction" AS "reaction_reaction", "note"."id" AS "note_id", "note"."createdAt" AS "note_createdAt", "note"."replyId" AS "note_replyId", "note"."renoteId" AS "note_renoteId", "note"."threadId" AS "note_threadId", "note"."text" AS "note_text", "note"."name" AS "note_name", "note"."cw" AS "note_cw", "note"."userId" AS "note_userId", "note"."localOnly" AS "note_localOnly", "note"."reactionAcceptance" AS "note_reactionAcceptance", "note"."renoteCount" AS "note_renoteCount", "note"."repliesCount" AS "note_repliesCount", "note"."reactions" AS "note_reactions", "note"."visibility" AS "note_visibility", "note"."uri" AS "note_uri", "note"."url" AS "note_url", "note"."fileIds" AS "note_fileIds", "note"."attachedFileTypes" AS "note_attachedFileTypes", "note"."visibleUserIds" AS "note_visibleUserIds", "note"."mentions" AS "note_mentions", "note"."mentionedRemoteUsers" AS "note_mentionedRemoteUsers", "note"."emojis" AS "note_emojis", "note"."tags" AS "note_tags", "note"."hasPoll" AS "note_hasPoll", "note"."channelId" AS "note_channelId", "note"."userHost" AS "note_userHost", "note"."replyUserId" AS "note_replyUserId", "note"."replyUserHost" AS "note_replyUserHost", "note"."renoteUserId" AS "note_renoteUserId", "note"."renoteUserHost" AS "note_renoteUserHost" FROM "note_reaction" "reaction" LEFT JOIN "note" "note" ON "note"."id"="reaction"."noteId" WHERE "reaction"."id" < $1 AND "reaction"."userId" = $2 AND (("note"."visibility" = $8 OR "note"."visibility" = $9) OR "note"."userId" = $3 OR $4 = ANY("note"."visibleUserIds") OR $5 = ANY("note"."mentions") OR ("note"."visibility" = $10 AND ("note"."userId" IN (SELECT "following"."followeeId" AS "following_followeeId" FROM "following" "following" WHERE "following"."followerId" = $6) OR "note"."replyUserId" = $7)))) "distinctAlias" ORDER BY "distinctAlias"."reaction_id" DESC, "reaction_id" ASC LIMIT $11   0   0.0 0.0 0.0 0.0 0.0 35  17222.766013    21.509164000000000  14722.809564000000  492.0790289428570   2443.374730779850   960 6760904 182160  18  48  0   0   0   0   0   0   0.0 0.0 0.0 0.0 29  11  89801   0   0.0 0   0.0 0   0.0 0   0.0
16822   16426   TRUE    -6892100638206848872    DELETE FROM "user" WHERE "id" IN ($1)   0   0.0 0.0 0.0 0.0 0.0 1419    64698.88648200010   4.457217    11767.120392    45.59470506131070   337.8198344050560   1419    2082571 113871  51824   65  0   0   0   0   0   0   0.0 0.0 0.0 0.0 58321   51730   402572043   0   0.0 0   0.0 0   0.0 0   0.0
16822   16426   TRUE    1136360094718252966 SELECT DISTINCT "distinctAlias"."note_id" AS "ids_note_id", "distinctAlias"."note_id" FROM (SELECT "note"."id" AS "note_id", "note"."createdAt" AS "note_createdAt", "note"."replyId" AS "note_replyId", "note"."renoteId" AS "note_renoteId", "note"."threadId" AS "note_threadId", "note"."text" AS "note_text", "note"."name" AS "note_name", "note"."cw" AS "note_cw", "note"."userId" AS "note_userId", "note"."localOnly" AS "note_localOnly", "note"."reactionAcceptance" AS "note_reactionAcceptance", "note"."renoteCount" AS "note_renoteCount", "note"."repliesCount" AS "note_repliesCount", "note"."reactions" AS "note_reactions", "note"."visibility" AS "note_visibility", "note"."uri" AS "note_uri", "note"."url" AS "note_url", "note"."fileIds" AS "note_fileIds", "note"."attachedFileTypes" AS "note_attachedFileTypes", "note"."visibleUserIds" AS "note_visibleUserIds", "note"."mentions" AS "note_mentions", "note"."mentionedRemoteUsers" AS "note_mentionedRemoteUsers", "note"."emojis" AS "note_emojis", "note"."tags" AS "note_tags", "note"."hasPoll" AS "note_hasPoll", "note"."channelId" AS "note_channelId", "note"."userHost" AS "note_userHost", "note"."replyUserId" AS "note_replyUserId", "note"."replyUserHost" AS "note_replyUserHost", "note"."renoteUserId" AS "note_renoteUserId", "note"."renoteUserHost" AS "note_renoteUserHost", "user"."id" AS "user_id", "user"."createdAt" AS "user_createdAt", "user"."updatedAt" AS "user_updatedAt", "user"."lastFetchedAt" AS "user_lastFetchedAt", "user"."lastActiveDate" AS "user_lastActiveDate", "user"."hideOnlineStatus" AS "user_hideOnlineStatus", "user"."username" AS "user_username", "user"."name" AS "user_name", "user"."followersCount" AS "user_followersCount", "user"."followingCount" AS "user_followingCount", "user"."movedToUri" AS "user_movedToUri", "user"."movedAt" AS "user_movedAt", "user"."alsoKnownAs" AS "user_alsoKnownAs", "user"."notesCount" AS "user_notesCount", "user"."avatarId" AS "user_avatarId", "user"."bannerId" AS "user_bannerId", "user"."avatarUrl" AS "user_avatarUrl", "user"."bannerUrl" AS "user_bannerUrl", "user"."avatarBlurhash" AS "user_avatarBlurhash", "user"."bannerBlurhash" AS "user_bannerBlurhash", "user"."tags" AS "user_tags", "user"."isSuspended" AS "user_isSuspended", "user"."isLocked" AS "user_isLocked", "user"."isBot" AS "user_isBot", "user"."isCat" AS "user_isCat", "user"."isRoot" AS "user_isRoot", "user"."isExplorable" AS "user_isExplorable", "user"."isDeleted" AS "user_isDeleted", "user"."emojis" AS "user_emojis", "user"."host" AS "user_host", "user"."inbox" AS "user_inbox", "user"."sharedInbox" AS "user_sharedInbox", "user"."featured" AS "user_featured", "user"."uri" AS "user_uri", "user"."followersUri" AS "user_followersUri", "user"."token" AS "user_token", "reply"."id" AS "reply_id", "reply"."createdAt" AS "reply_createdAt", "reply"."replyId" AS "reply_replyId", "reply"."renoteId" AS "reply_renoteId", "reply"."threadId" AS "reply_threadId", "reply"."text" AS "reply_text", "reply"."name" AS "reply_name", "reply"."cw" AS "reply_cw", "reply"."userId" AS "reply_userId", "reply"."localOnly" AS "reply_localOnly", "reply"."reactionAcceptance" AS "reply_reactionAcceptance", "reply"."renoteCount" AS "reply_renoteCount", "reply"."repliesCount" AS "reply_repliesCount", "reply"."reactions" AS "reply_reactions", "reply"."visibility" AS "reply_visibility", "reply"."uri" AS "reply_uri", "reply"."url" AS "reply_url", "reply"."fileIds" AS "reply_fileIds", "reply"."attachedFileTypes" AS "reply_attachedFileTypes", "reply"."visibleUserIds" AS "reply_visibleUserIds", "reply"."mentions" AS "reply_mentions", "reply"."mentionedRemoteUsers" AS "reply_mentionedRemoteUsers", "reply"."emojis" AS "reply_emojis", "reply"."tags" AS "reply_tags", "reply"."hasPoll" AS "reply_hasPoll", "reply"."channelId" AS "reply_channelId", "reply"."userHost" AS "reply_userHost", "reply"."replyUserId" AS "reply_replyUserId", "reply"."replyUserHost" AS "reply_replyUserHost", "reply"."renoteUserId" AS "reply_renoteUserId", "reply"."renoteUserHost" AS "reply_renoteUserHost", "renote"."id" AS "renote_id", "renote"."createdAt" AS "renote_createdAt", "renote"."replyId" AS "renote_replyId", "renote"."renoteId" AS "renote_renoteId", "renote"."threadId" AS "renote_threadId", "renote"."text" AS "renote_text", "renote"."name" AS "renote_name", "renote"."cw" AS "renote_cw", "renote"."userId" AS "renote_userId", "renote"."localOnly" AS "renote_localOnly", "renote"."reactionAcceptance" AS "renote_reactionAcceptance", "renote"."renoteCount" AS "renote_renoteCount", "renote"."repliesCount" AS "renote_repliesCount", "renote"."reactions" AS "renote_reactions", "renote"."visibility" AS "renote_visibility", "renote"."uri" AS "renote_uri", "renote"."url" AS "renote_url", "renote"."fileIds" AS "renote_fileIds", "renote"."attachedFileTypes" AS "renote_attachedFileTypes", "renote"."visibleUserIds" AS "renote_visibleUserIds", "renote"."mentions" AS "renote_mentions", "renote"."mentionedRemoteUsers" AS "renote_mentionedRemoteUsers", "renote"."emojis" AS "renote_emojis", "renote"."tags" AS "renote_tags", "renote"."hasPoll" AS "renote_hasPoll", "renote"."channelId" AS "renote_channelId", "renote"."userHost" AS "renote_userHost", "renote"."replyUserId" AS "renote_replyUserId", "renote"."replyUserHost" AS "renote_replyUserHost", "renote"."renoteUserId" AS "renote_renoteUserId", "renote"."renoteUserHost" AS "renote_renoteUserHost", "replyUser"."id" AS "replyUser_id", "replyUser"."createdAt" AS "replyUser_createdAt", "replyUser"."updatedAt" AS "replyUser_updatedAt", "replyUser"."lastFetchedAt" AS "replyUser_lastFetchedAt", "replyUser"."lastActiveDate" AS "replyUser_lastActiveDate", "replyUser"."hideOnlineStatus" AS "replyUser_hideOnlineStatus", "replyUser"."username" AS "replyUser_username", "replyUser"."name" AS "replyUser_name", "replyUser"."followersCount" AS "replyUser_followersCount", "replyUser"."followingCount" AS "replyUser_followingCount", "replyUser"."movedToUri" AS "replyUser_movedToUri", "replyUser"."movedAt" AS "replyUser_movedAt", "replyUser"."alsoKnownAs" AS "replyUser_alsoKnownAs", "replyUser"."notesCount" AS "replyUser_notesCount", "replyUser"."avatarId" AS "replyUser_avatarId", "replyUser"."bannerId" AS "replyUser_bannerId", "replyUser"."avatarUrl" AS "replyUser_avatarUrl", "replyUser"."bannerUrl" AS "replyUser_bannerUrl", "replyUser"."avatarBlurhash" AS "replyUser_avatarBlurhash", "replyUser"."bannerBlurhash" AS "replyUser_bannerBlurhash", "replyUser"."tags" AS "replyUser_tags", "replyUser"."isSuspended" AS "replyUser_isSuspended", "replyUser"."isLocked" AS "replyUser_isLocked", "replyUser"."isBot" AS "replyUser_isBot", "replyUser"."isCat" AS "replyUser_isCat", "replyUser"."isRoot" AS "replyUser_isRoot", "replyUser"."isExplorable" AS "replyUser_isExplorable", "replyUser"."isDeleted" AS "replyUser_isDeleted", "replyUser"."emojis" AS "replyUser_emojis", "replyUser"."host" AS "replyUser_host", "replyUser"."inbox" AS "replyUser_inbox", "replyUser"."sharedInbox" AS "replyUser_sharedInbox", "replyUser"."featured" AS "replyUser_featured", "replyUser"."uri" AS "replyUser_uri", "replyUser"."followersUri" AS "replyUser_followersUri", "replyUser"."token" AS "replyUser_token", "renoteUser"."id" AS "renoteUser_id", "renoteUser"."createdAt" AS "renoteUser_createdAt", "renoteUser"."updatedAt" AS "renoteUser_updatedAt", "renoteUser"."lastFetchedAt" AS "renoteUser_lastFetchedAt", "renoteUser"."lastActiveDate" AS "renoteUser_lastActiveDate", "renoteUser"."hideOnlineStatus" AS "renoteUser_hideOnlineStatus", "renoteUser"."username" AS "renoteUser_username", "renoteUser"."name" AS "renoteUser_name", "renoteUser"."followersCount" AS "renoteUser_followersCount", "renoteUser"."followingCount" AS "renoteUser_followingCount", "renoteUser"."movedToUri" AS "renoteUser_movedToUri", "renoteUser"."movedAt" AS "renoteUser_movedAt", "renoteUser"."alsoKnownAs" AS "renoteUser_alsoKnownAs", "renoteUser"."notesCount" AS "renoteUser_notesCount", "renoteUser"."avatarId" AS "renoteUser_avatarId", "renoteUser"."bannerId" AS "renoteUser_bannerId", "renoteUser"."avatarUrl" AS "renoteUser_avatarUrl", "renoteUser"."bannerUrl" AS "renoteUser_bannerUrl", "renoteUser"."avatarBlurhash" AS "renoteUser_avatarBlurhash", "renoteUser"."bannerBlurhash" AS "renoteUser_bannerBlurhash", "renoteUser"."tags" AS "renoteUser_tags", "renoteUser"."isSuspended" AS "renoteUser_isSuspended", "renoteUser"."isLocked" AS "renoteUser_isLocked", "renoteUser"."isBot" AS "renoteUser_isBot", "renoteUser"."isCat" AS "renoteUser_isCat", "renoteUser"."isRoot" AS "renoteUser_isRoot", "renoteUser"."isExplorable" AS "renoteUser_isExplorable", "renoteUser"."isDeleted" AS "renoteUser_isDeleted", "renoteUser"."emojis" AS "renoteUser_emojis", "renoteUser"."host" AS "renoteUser_host", "renoteUser"."inbox" AS "renoteUser_inbox", "renoteUser"."sharedInbox" AS "renoteUser_sharedInbox", "renoteUser"."featured" AS "renoteUser_featured", "renoteUser"."uri" AS "renoteUser_uri", "renoteUser"."followersUri" AS "renoteUser_followersUri", "renoteUser"."token" AS "renoteUser_token" FROM "note" "note" INNER JOIN "user" "user" ON "user"."id"="note"."userId"  LEFT JOIN "note" "reply" ON "reply"."id"="note"."replyId"  LEFT JOIN "note" "renote" ON "renote"."id"="note"."renoteId"  LEFT JOIN "user" "replyUser" ON "replyUser"."id"="reply"."userId"  LEFT JOIN "user" "renoteUser" ON "renoteUser"."id"="renote"."userId" WHERE "note"."userId" = $1 AND (("note"."visibility" = $26 OR "note"."visibility" = $27) OR "note"."userId" = $2 OR $3 = ANY("note"."visibleUserIds") OR $4 = ANY("note"."mentions") OR ("note"."visibility" = $28 AND ("note"."userId" IN (SELECT "following"."followeeId" AS "following_followeeId" FROM "following" "following" WHERE "following"."followerId" = $5) OR "note"."replyUserId" = $6))) AND "note"."userId" NOT IN (SELECT "muting"."muteeId" AS "muting_muteeId" FROM "muting" "muting" WHERE "muting"."muterId" = $7 AND "muting"."muteeId" != $8) AND ("note"."replyUserId" IS NULL OR "note"."replyUserId" NOT IN (SELECT "muting"."muteeId" AS "muting_muteeId" FROM "muting" "muting" WHERE "muting"."muterId" = $9 AND "muting"."muteeId" != $10)) AND ("note"."renoteUserId" IS NULL OR "note"."renoteUserId" NOT IN (SELECT "muting"."muteeId" AS "muting_muteeId" FROM "muting" "muting" WHERE "muting"."muterId" = $11 AND "muting"."muteeId" != $12)) AND ("note"."userHost" IS NULL OR NOT ((SELECT "user_profile"."mutedInstances" AS "user_profile_mutedInstances" FROM "user_profile" "user_profile" WHERE "user_profile"."userId" = $13)::jsonb ? "note"."userHost")) AND ("note"."replyUserHost" IS NULL OR NOT ((SELECT "user_profile"."mutedInstances" AS "user_profile_mutedInstances" FROM "user_profile" "user_profile" WHERE "user_profile"."userId" = $14)::jsonb ? "note"."replyUserHost")) AND ("note"."renoteUserHost" IS NULL OR NOT ((SELECT "user_profile"."mutedInstances" AS "user_profile_mutedInstances" FROM "user_profile" "user_profile" WHERE "user_profile"."userId" = $15)::jsonb ? "note"."renoteUserHost")) AND "note"."userId" NOT IN (SELECT "blocking"."blockerId" AS "blocking_blockerId" FROM "blocking" "blocking" WHERE "blocking"."blockeeId" = $16) AND ("note"."replyUserId" IS NULL OR "note"."replyUserId" NOT IN (SELECT "blocking"."blockerId" AS "blocking_blockerId" FROM "blocking" "blocking" WHERE "blocking"."blockeeId" = $17)) AND ("note"."renoteUserId" IS NULL OR "note"."renoteUserId" NOT IN (SELECT "blocking"."blockerId" AS "blocking_blockerId" FROM "blocking" "blocking" WHERE "blocking"."blockeeId" = $18)) AND "note"."fileIds" != $29 AND ($19 = ANY("note"."attachedFileTypes") OR $20 = ANY("note"."attachedFileTypes") OR $21 = ANY("note"."attachedFileTypes") OR $22 = ANY("note"."attachedFileTypes") OR $23 = ANY("note"."attachedFileTypes") OR $24 = ANY("note"."attachedFileTypes") OR $25 = ANY("note"."attachedFileTypes")) AND "note"."cw" IS NULL AND $30 = (SELECT COUNT(*) FROM drive_file df WHERE [df.id](http://df.id/) = ANY(note."fileIds") AND df."isSensitive" = $31)) "distinctAlias" ORDER BY "distinctAlias"."note_id" DESC, "note_id" ASC LIMIT $32   0   0.0 0.0 0.0 0.0 0.0 11438   2843098.093984020   0.01945 7855.261708 248.5660162601850   547.1887165416280   81943   48143287    12225075    1688    5421    0   0   0   0   0   0   0.0 0.0 0.0 0.0 1817    1218    8952442 197709  31733.600407000000  2   375.01095700000000  1330    19569.19963200000   1330    197942.18525700000

そのうちひとつを整形

SELECT DISTINCT
    "distinctAlias"."note_id" AS "ids_note_id",
    "distinctAlias"."note_id"
FROM
    (
        SELECT
            "note"."id" AS "note_id",
            "note"."createdAt" AS "note_createdAt",
            "note"."replyId" AS "note_replyId",
            "note"."renoteId" AS "note_renoteId",
            "note"."threadId" AS "note_threadId",
            "note"."text" AS "note_text",
            "note"."name" AS "note_name",
            "note"."cw" AS "note_cw",
            "note"."userId" AS "note_userId",
            "note"."localOnly" AS "note_localOnly",
            "note"."reactionAcceptance" AS "note_reactionAcceptance",
            "note"."renoteCount" AS "note_renoteCount",
            "note"."repliesCount" AS "note_repliesCount",
            "note"."reactions" AS "note_reactions",
            "note"."visibility" AS "note_visibility",
            "note"."uri" AS "note_uri",
            "note"."url" AS "note_url",
            "note"."fileIds" AS "note_fileIds",
            "note"."attachedFileTypes" AS "note_attachedFileTypes",
            "note"."visibleUserIds" AS "note_visibleUserIds",
            "note"."mentions" AS "note_mentions",
            "note"."mentionedRemoteUsers" AS "note_mentionedRemoteUsers",
            "note"."emojis" AS "note_emojis",
            "note"."tags" AS "note_tags",
            "note"."hasPoll" AS "note_hasPoll",
            "note"."channelId" AS "note_channelId",
            "note"."userHost" AS "note_userHost",
            "note"."replyUserId" AS "note_replyUserId",
            "note"."replyUserHost" AS "note_replyUserHost",
            "note"."renoteUserId" AS "note_renoteUserId",
            "note"."renoteUserHost" AS "note_renoteUserHost",
            "user"."id" AS "user_id",
            "user"."createdAt" AS "user_createdAt",
            "user"."updatedAt" AS "user_updatedAt",
            "user"."lastFetchedAt" AS "user_lastFetchedAt",
            "user"."lastActiveDate" AS "user_lastActiveDate",
            "user"."hideOnlineStatus" AS "user_hideOnlineStatus",
            "user"."username" AS "user_username",
            "user"."name" AS "user_name",
            "user"."followersCount" AS "user_followersCount",
            "user"."followingCount" AS "user_followingCount",
            "user"."movedToUri" AS "user_movedToUri",
            "user"."movedAt" AS "user_movedAt",
            "user"."alsoKnownAs" AS "user_alsoKnownAs",
            "user"."notesCount" AS "user_notesCount",
            "user"."avatarId" AS "user_avatarId",
            "user"."bannerId" AS "user_bannerId",
            "user"."avatarUrl" AS "user_avatarUrl",
            "user"."bannerUrl" AS "user_bannerUrl",
            "user"."avatarBlurhash" AS "user_avatarBlurhash",
            "user"."bannerBlurhash" AS "user_bannerBlurhash",
            "user"."tags" AS "user_tags",
            "user"."isSuspended" AS "user_isSuspended",
            "user"."isLocked" AS "user_isLocked",
            "user"."isBot" AS "user_isBot",
            "user"."isCat" AS "user_isCat",
            "user"."isRoot" AS "user_isRoot",
            "user"."isExplorable" AS "user_isExplorable",
            "user"."isDeleted" AS "user_isDeleted",
            "user"."emojis" AS "user_emojis",
            "user"."host" AS "user_host",
            "user"."inbox" AS "user_inbox",
            "user"."sharedInbox" AS "user_sharedInbox",
            "user"."featured" AS "user_featured",
            "user"."uri" AS "user_uri",
            "user"."followersUri" AS "user_followersUri",
            "user"."token" AS "user_token",
            "reply"."id" AS "reply_id",
            "reply"."createdAt" AS "reply_createdAt",
            "reply"."replyId" AS "reply_replyId",
            "reply"."renoteId" AS "reply_renoteId",
            "reply"."threadId" AS "reply_threadId",
            "reply"."text" AS "reply_text",
            "reply"."name" AS "reply_name",
            "reply"."cw" AS "reply_cw",
            "reply"."userId" AS "reply_userId",
            "reply"."localOnly" AS "reply_localOnly",
            "reply"."reactionAcceptance" AS "reply_reactionAcceptance",
            "reply"."renoteCount" AS "reply_renoteCount",
            "reply"."repliesCount" AS "reply_repliesCount",
            "reply"."reactions" AS "reply_reactions",
            "reply"."visibility" AS "reply_visibility",
            "reply"."uri" AS "reply_uri",
            "reply"."url" AS "reply_url",
            "reply"."fileIds" AS "reply_fileIds",
            "reply"."attachedFileTypes" AS "reply_attachedFileTypes",
            "reply"."visibleUserIds" AS "reply_visibleUserIds",
            "reply"."mentions" AS "reply_mentions",
            "reply"."mentionedRemoteUsers" AS "reply_mentionedRemoteUsers",
            "reply"."emojis" AS "reply_emojis",
            "reply"."tags" AS "reply_tags",
            "reply"."hasPoll" AS "reply_hasPoll",
            "reply"."channelId" AS "reply_channelId",
            "reply"."userHost" AS "reply_userHost",
            "reply"."replyUserId" AS "reply_replyUserId",
            "reply"."replyUserHost" AS "reply_replyUserHost",
            "reply"."renoteUserId" AS "reply_renoteUserId",
            "reply"."renoteUserHost" AS "reply_renoteUserHost",
            "renote"."id" AS "renote_id",
            "renote"."createdAt" AS "renote_createdAt",
            "renote"."replyId" AS "renote_replyId",
            "renote"."renoteId" AS "renote_renoteId",
            "renote"."threadId" AS "renote_threadId",
            "renote"."text" AS "renote_text",
            "renote"."name" AS "renote_name",
            "renote"."cw" AS "renote_cw",
            "renote"."userId" AS "renote_userId",
            "renote"."localOnly" AS "renote_localOnly",
            "renote"."reactionAcceptance" AS "renote_reactionAcceptance",
            "renote"."renoteCount" AS "renote_renoteCount",
            "renote"."repliesCount" AS "renote_repliesCount",
            "renote"."reactions" AS "renote_reactions",
            "renote"."visibility" AS "renote_visibility",
            "renote"."uri" AS "renote_uri",
            "renote"."url" AS "renote_url",
            "renote"."fileIds" AS "renote_fileIds",
            "renote"."attachedFileTypes" AS "renote_attachedFileTypes",
            "renote"."visibleUserIds" AS "renote_visibleUserIds",
            "renote"."mentions" AS "renote_mentions",
            "renote"."mentionedRemoteUsers" AS "renote_mentionedRemoteUsers",
            "renote"."emojis" AS "renote_emojis",
            "renote"."tags" AS "renote_tags",
            "renote"."hasPoll" AS "renote_hasPoll",
            "renote"."channelId" AS "renote_channelId",
            "renote"."userHost" AS "renote_userHost",
            "renote"."replyUserId" AS "renote_replyUserId",
            "renote"."replyUserHost" AS "renote_replyUserHost",
            "renote"."renoteUserId" AS "renote_renoteUserId",
            "renote"."renoteUserHost" AS "renote_renoteUserHost",
            "replyUser"."id" AS "replyUser_id",
            "replyUser"."createdAt" AS "replyUser_createdAt",
            "replyUser"."updatedAt" AS "replyUser_updatedAt",
            "replyUser"."lastFetchedAt" AS "replyUser_lastFetchedAt",
            "replyUser"."lastActiveDate" AS "replyUser_lastActiveDate",
            "replyUser"."hideOnlineStatus" AS "replyUser_hideOnlineStatus",
            "replyUser"."username" AS "replyUser_username",
            "replyUser"."name" AS "replyUser_name",
            "replyUser"."followersCount" AS "replyUser_followersCount",
            "replyUser"."followingCount" AS "replyUser_followingCount",
            "replyUser"."movedToUri" AS "replyUser_movedToUri",
            "replyUser"."movedAt" AS "replyUser_movedAt",
            "replyUser"."alsoKnownAs" AS "replyUser_alsoKnownAs",
            "replyUser"."notesCount" AS "replyUser_notesCount",
            "replyUser"."avatarId" AS "replyUser_avatarId",
            "replyUser"."bannerId" AS "replyUser_bannerId",
            "replyUser"."avatarUrl" AS "replyUser_avatarUrl",
            "replyUser"."bannerUrl" AS "replyUser_bannerUrl",
            "replyUser"."avatarBlurhash" AS "replyUser_avatarBlurhash",
            "replyUser"."bannerBlurhash" AS "replyUser_bannerBlurhash",
            "replyUser"."tags" AS "replyUser_tags",
            "replyUser"."isSuspended" AS "replyUser_isSuspended",
            "replyUser"."isLocked" AS "replyUser_isLocked",
            "replyUser"."isBot" AS "replyUser_isBot",
            "replyUser"."isCat" AS "replyUser_isCat",
            "replyUser"."isRoot" AS "replyUser_isRoot",
            "replyUser"."isExplorable" AS "replyUser_isExplorable",
            "replyUser"."isDeleted" AS "replyUser_isDeleted",
            "replyUser"."emojis" AS "replyUser_emojis",
            "replyUser"."host" AS "replyUser_host",
            "replyUser"."inbox" AS "replyUser_inbox",
            "replyUser"."sharedInbox" AS "replyUser_sharedInbox",
            "replyUser"."featured" AS "replyUser_featured",
            "replyUser"."uri" AS "replyUser_uri",
            "replyUser"."followersUri" AS "replyUser_followersUri",
            "replyUser"."token" AS "replyUser_token",
            "renoteUser"."id" AS "renoteUser_id",
            "renoteUser"."createdAt" AS "renoteUser_createdAt",
            "renoteUser"."updatedAt" AS "renoteUser_updatedAt",
            "renoteUser"."lastFetchedAt" AS "renoteUser_lastFetchedAt",
            "renoteUser"."lastActiveDate" AS "renoteUser_lastActiveDate",
            "renoteUser"."hideOnlineStatus" AS "renoteUser_hideOnlineStatus",
            "renoteUser"."username" AS "renoteUser_username",
            "renoteUser"."name" AS "renoteUser_name",
            "renoteUser"."followersCount" AS "renoteUser_followersCount",
            "renoteUser"."followingCount" AS "renoteUser_followingCount",
            "renoteUser"."movedToUri" AS "renoteUser_movedToUri",
            "renoteUser"."movedAt" AS "renoteUser_movedAt",
            "renoteUser"."alsoKnownAs" AS "renoteUser_alsoKnownAs",
            "renoteUser"."notesCount" AS "renoteUser_notesCount",
            "renoteUser"."avatarId" AS "renoteUser_avatarId",
            "renoteUser"."bannerId" AS "renoteUser_bannerId",
            "renoteUser"."avatarUrl" AS "renoteUser_avatarUrl",
            "renoteUser"."bannerUrl" AS "renoteUser_bannerUrl",
            "renoteUser"."avatarBlurhash" AS "renoteUser_avatarBlurhash",
            "renoteUser"."bannerBlurhash" AS "renoteUser_bannerBlurhash",
            "renoteUser"."tags" AS "renoteUser_tags",
            "renoteUser"."isSuspended" AS "renoteUser_isSuspended",
            "renoteUser"."isLocked" AS "renoteUser_isLocked",
            "renoteUser"."isBot" AS "renoteUser_isBot",
            "renoteUser"."isCat" AS "renoteUser_isCat",
            "renoteUser"."isRoot" AS "renoteUser_isRoot",
            "renoteUser"."isExplorable" AS "renoteUser_isExplorable",
            "renoteUser"."isDeleted" AS "renoteUser_isDeleted",
            "renoteUser"."emojis" AS "renoteUser_emojis",
            "renoteUser"."host" AS "renoteUser_host",
            "renoteUser"."inbox" AS "renoteUser_inbox",
            "renoteUser"."sharedInbox" AS "renoteUser_sharedInbox",
            "renoteUser"."featured" AS "renoteUser_featured",
            "renoteUser"."uri" AS "renoteUser_uri",
            "renoteUser"."followersUri" AS "renoteUser_followersUri",
            "renoteUser"."token" AS "renoteUser_token"
        FROM
            "note" "note"
            INNER JOIN
                "user_list_joining" "userListJoining"
            ON  "userListJoining"."userId" = "note"."userId"
            INNER JOIN
                "user" "user"
            ON  "user"."id" = "note"."userId"
            LEFT JOIN
                "note" "reply"
            ON  "reply"."id" = "note"."replyId"
            LEFT JOIN
                "note" "renote"
            ON  "renote"."id" = "note"."renoteId"
            LEFT JOIN
                "user" "replyUser"
            ON  "replyUser"."id" = "reply"."userId"
            LEFT JOIN
                "user" "renoteUser"
            ON  "renoteUser"."id" = "renote"."userId"
        WHERE
            "userListJoining"."userListId" = $1
        AND (
                (
                    "note"."visibility" = $7
                OR  "note"."visibility" = $8
                )
            OR  "note"."userId" = $2
            OR  $3 = ANY("note"."visibleUserIds")
            OR  $4 = ANY("note"."mentions")
            OR  (
                    "note"."visibility" = $9
                AND (
                        "note"."userId" IN(
                            SELECT
                                "following"."followeeId" AS "following_followeeId"
                            FROM
                                "following" "following"
                            WHERE
                                "following"."followerId" = $5
                        )
                    OR  "note"."replyUserId" = $6
                    )
                )
            )
    ) "distinctAlias"
ORDER BY
    "distinctAlias"."note_id" DESC,
    "note_id" ASC
LIMIT $10

サブクエリやめてPreloadすれば早くなるんじゃないかな

MineCake147E commented 1 year ago

純Rustの場合、async runtimeなど独自の実装の学習が必要なので、メインはTypescriptを維持したほうがいいと思います。

少し調べてみたのですが、Rustでは非同期処理の実装が乱立しているみたいですね。 純Rustになった後で大揉めする原因になると思うので、私も純Rust案には賛同出来ないです。

KisaragiEffective commented 1 year ago

通りすがりの意見ですが、風のうわさで伺った「TypeErrorがバックエンドで発生している」という状況がある以上 (disclaimer: 頻度は知りません)、コードベースを100%Rustにすることは現実的ではないと考えています。

yuriha-chan commented 1 year ago

Rust や Go 案にどちらかというと賛成です。 ・メモリのフットプリント削減が見込める ・パフォーマンスの問題がより理解しやすく、予見しやすくなる ・おもしろそう

C#は、パフォーマンスの完全なコントロールを目的とするのなら、中途半端な気もします。(私は.NETを使わないので、偏見がありますが)

依存ライブラリを移行できなかったらどうしようもできないので、どちらにせよRustで作ったNodeのネイティブモジュールをパフォーマンスの影響が大きいところから採用していくという現在の方針を推し進めるのが良いかと思います。

sorairolake commented 1 year ago

メモリ関連の問題はGCのあるGoでもある程度は改善するでしょうが、GCやメモリリークの問題も考えたらGCのないRustを使う方がより良いとは思います。Rustに移行するにしても、移行や学習のコストを考えると必要な部分だけで段階的に行うのが良いと思います。

syuilo commented 1 year ago

Rustが実際にパフォーマンスが良いかどうかは抜きにしても、一般にRustの方がパフォーマンスが良いというイメージが広まっていて、Rustで書かれているという理由で他ソフトウェアが選択されることが増えているのでMisskeyを使ってもらうためにはRustにするしかなくなってきている

tamaina commented 1 year ago

そういう理由で技術選定するのは嫌い

windymelt commented 1 year ago

本当に速くしたかったらスロークエリなんとかするほうが先じゃないですか 言語を変えてスロークエリ超えられるパフォーマンス出るなら別ですがそんなことないと思う 平均 500msかかっているクエリがある以上、言語を変えても500msかかり続けるのではないですか

EbiseLutica commented 1 year ago

Rustが実際にパフォーマンスが良いかどうかは抜きにしても、一般にRustの方がパフォーマンスが良いというイメージが広まっていて、Rustで書かれているという理由で他ソフトウェアが選択されることが増えているのでMisskeyを使ってもらうためにはRustにするしかなくなってきている

気持ちはわかるけど、そういう理由でRustに置き換えたら100%利用者が増えるとは限らないし、戦うなら他の分野で戦う方法だってあるはず

重たい作業だし、これによるメリットがデメリットを上回る可能性もある 選定する理由としてはあと2,3個無いと不安

tamaina commented 1 year ago

バックエンドが速いことが選ばれる条件ならErlang/Elixirを使ってるPleromaが流行ってないのはおかしい

yuriha-chan commented 1 year ago

喫緊の課題としては、TLの構造の変更(https://github.com/misskey-dev/misskey/issues/9325 )などでDBクエリを改善したり、ジョブキューやRedis周りをいじったり、パラメータ調節したりが大事というのはそれはそう Rust の方がNodeJSと比べて最適化の伸びしろがあるのは事実と思うので、チューニングを詰めるつもりがあるなら、長期的に移行する構想をもっておくのは悪くないのではと思う。

MineCake147E commented 1 year ago

Rustで書かれているという理由で他ソフトウェアが選択されることが増えているので

JSやaltJSではないという理由ではないでしょうか。altJSの代わりとしてRustを採用する実装が多くたまたまRustで一致しているだけかと思われます。

Rustが実際にパフォーマンスが良いかどうかは抜きにしても、一般にRustの方がパフォーマンスが良いというイメージが広まっていて

Rust関係者は相当SEOがお上手のようですね。 コンパイラのバックエンドにLLVMが居て、Clangに匹敵するパフォーマンスが出るので、GCCやMSVCより速いというだけのことです。

syuilo commented 1 year ago

Pleromaは機能的に違いすぎるからなあ

tamaina commented 1 year ago

(カスタム絵文字使えないらしいけど)リアクションあるし違いすぎるとは言えないんじゃ?

syuilo commented 1 year ago

いくら良いものを作っても使ってもらえなきゃ意味がないというのがある

tamaina commented 1 year ago

Rustを使ってないからMisskeyを使わないという意見を私は聞いたことがない

KisaragiEffective commented 1 year ago

結局の所、CPUバウンドなのかIOバウンドなのかというのはよく言われる話ですが[要出典]、現状のパフォーマンスのボトルネックがIOバウンドならば言語を変えても無駄骨になるだけなので慎重に検討されたほうがよろしいかと

追記: 以下の出力からわかるとおり、現状のTSは8万行あります。これらのボトルネックがどこにあるのか計測せずに言語を乗り換えると、万が一CPUバウンドではなかったときに労力がかなり重くつくと考えられます。

参考: コミットaf3258dc79488b73435819e7799eb1515f15a6aa時点のtokeiの出力:

$ tokei
===============================================================================
 Language            Files        Lines         Code     Comments       Blanks
===============================================================================
 CSS                     4          239          211            0           28
 JavaScript            222         6930         6330           51          549
 JSON                    6          361          361            0            0
 Markdown                2            5            0            5            0
 Pug                    13          557          441           10          106
 SVG                     3           10           10            0            0
 Plain Text              1            4            0            3            1
 TypeScript            775        80525        66921         2962        10642
-------------------------------------------------------------------------------
 HTML                    1           20           15            4            1
 |- CSS                  1            4            4            0            0
 (Total)                             24           19            4            1
===============================================================================
 Total                1027        88651        74289         3035        11327
===============================================================================
tamaina commented 1 year ago

こういう"殿ご乱心"があるからMisskeyを使いたくないという意見はめっちゃ聞くけど

sorairolake commented 1 year ago

Rustであることが多くの人に重要視されているなら、Calckeyが主流になっていると思うので、そこを重視する人は多くはないと思います

syuilo commented 1 year ago

Rustを使ってないからMisskeyを使わないという意見を私は聞いたことがない

毎週のようにそういう投稿や要望が流れてくるからRust化が強く望まれているのは感じる

tamaina commented 1 year ago

Calckeyは流石にこれからじゃない?

EbiseLutica commented 1 year ago

Rustを理由としている例がどれなのか知りたい

Calckey等のフォークがRustへの置き換えを進めているのは話に聞くけど、拾うべき意見は正直そこじゃないなって感じがする

CyberRex0 commented 1 year ago

世界が狭すぎる

MineCake147E commented 1 year ago

Rust の方がNodeJSと比べて最適化の伸びしろがあるのは事実

Runtime Profile-Guided Optimization が比較的簡単にできるJIT系言語(C#やJava等)のほうがその辺は有利です。 また、少なくともC#にはHardware Intrinsicsがあるので、SIMD関連でLLVMの真似事をしたければある程度はできますし(.NET 8.0で AVX-512に対応予定)、LLVMが単純なコードから最適化によって生成するコードより高速なC#コードを書くこともC++同様可能です。(LLVMが吐いたアセンブリが元々最適である場合を除く)

syuilo commented 1 year ago

Rustであることが多くの人に重要視されているなら、Calckeyが主流になっていると思うので、そこを重視する人は多くはないと思います

Misskey→Calckeyに乗り換えるのはよく見るけど逆はほとんど見かけないわね

tamaina commented 1 year ago

Misskey→Calckeyに乗り換えるのはよく見るけど逆はほとんど見かけないわね

Misskeyを知ってからCalckeyを知る(Calckeyを先に知ることはない)んだからそりゃそうでは

MisskeyサイドがCalckeyからマイグレーションする方法を提供しているわけでもないし

nullkal commented 1 year ago

ぶっちゃけTwitterだって2011年ぐらいまでRuby on Railsだったんだし、言語変えるより前にやるべきことはいっぱいあると思う。

windymelt commented 1 year ago

仮に、PostgreSQLまわりのスロークエリの改善が完了して、ボトルネックがバックエンドに移動した場合(言い換えるとバックエンドにボトルネックがなければバックエンドの最適化をしても全く無意味)、たぶんNode.js上のボトルネックを排除したほうが、言語を変更するよりも良好なパフォーマンスが得られるのではないかと思います。加えて、RustやCと比較するのは酷ですが、普通にNode.jsは速いと思っているので、積極的に変更するモチベーションはないと思います(Rust自体は良い言語だと思います)。

syuilo commented 1 year ago

Node.js使っててネガティブな意見もらうことはあってもポジティブな意見もらうことが全くないのよね

tamaina commented 1 year ago

Node.js使っててネガティブな意見もらうことはあってもポジティブな意見もらうことが全くないのよね

それは同意できるが、DenoやBunなどJavaScriptのまま移行できる選択肢があるからね

syuilo commented 1 year ago

Deno/Bunもパフォーマンス誇張しすぎみたいな意見があるから実際どれくらい優れているのかは分からないけど次のステップとしてはそれらになる可能性がある

tamaina commented 1 year ago

ここでも繰り返し述べられているし、再三の主張にはなるけど、重そうな処理をRustで書かれたNode.jsのネイティブモジュールへ移行するのが簡単かつ効果的だと思う

sorairolake commented 1 year ago

全面的なRustへの移行はコストが高すぎますし、重そうな処理だけ移行する場合と比べて劇的に改善するようなことは無いと思います