{"action":"created","issue":{"url":"https://api.github.com/repos/jfinkels/flask-restless/issues/558","repository_url":"https://api.github.com/repos/jfinkels/flask-restless","labels_url":"https://api.github.com/repos/jfinkels/flask-restless/issues/558/labels{/name}","comments_url":"https://api.github.com/repos/jfinkels/flask-restless/issues/558/comments","events_url":"https://api.github.com/repos/jfinkels/flask-restless/issues/558/events","html_url":"https://github.com/jfinkels/flask-restless/issues/558","id":164107337,"number":558,"title":"Painfully slow responses with large dataset and relationships (?)","user":{"login":"AlmightyOatmeal","id":12953712,"avatar_url":"https://avatars.githubusercontent.com/u/12953712?v=3","gravatar_id":"","url":"https://api.github.com/users/AlmightyOatmeal","html_url":"https://github.com/AlmightyOatmeal","followers_url":"https://api.github.com/users/AlmightyOatmeal/followers","following_url":"https://api.github.com/users/AlmightyOatmeal/following{/other_user}","gists_url":"https://api.github.com/users/AlmightyOatmeal/gists{/gist_id}","starred_url":"https://api.github.com/users/AlmightyOatmeal/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AlmightyOatmeal/subscriptions","organizations_url":"https://api.github.com/users/AlmightyOatmeal/orgs","repos_url":"https://api.github.com/users/AlmightyOatmeal/repos","events_url":"https://api.github.com/users/AlmightyOatmeal/events{/privacy}","received_events_url":"https://api.github.com/users/AlmightyOatmeal/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/jfinkels/flask-restless/labels/bug","name":"bug","color":"fc2929"}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":11,"created_at":"2016-07-06T15:41:42Z","updated_at":"2016-07-13T15:01:41Z","closed_at":null,"body":"I'm running into a serious performance problem with flask-restless that is making me look at alternatives and that breaks my heart. The posts table contains almost 700k \"posts\" for a blog with one-to-one mappings for raw JSON blobs and a many-to-many for tags; with getting only 10 results for each page, the request is taking 1-2 minutes!\r\n\r\nI've already been through the database thinking that was an issue but it most certainly isn't. MySQL returns results in a second or two. Then I thought maybe it was SQLAlchemy so I went through that with a fine tooth comb but that wasn't the problem either; I can use flask-restful, flask-potion, or sqlalchemy by itself to generate the *exact* same result set in roughly 5 seconds or less.\r\n\r\nThe blog posts model:\r\n```\r\ntumbleweed_post_tags = db.Table('tumbleweed_post_tags',\r\n    db.Column('id', db.Integer, primary_key=True, autoincrement=True),\r\n    db.Column('post_id', db.Integer, db.ForeignKey('tumbleweed_post.id', ondelete='cascade'), index=True),\r\n    db.Column('tag_id', db.Integer, db.ForeignKey('tumbleweed_tag.id', ondelete='cascade'), index=True),\r\n    info={'bind_key': 'tumbleweed'}\r\n)\r\n\r\n\r\nclass TumbleweedPost(db.Model, CustomCommon):\r\n    __bind_key__ = 'tumbleweed'\r\n    __tablename__ = 'tumbleweed_post'\r\n\r\n    id = db.Column(db.Integer, primary_key=True)\r\n    post_id = db.Column(db.String(convert_unicode=True, length=255, collation='utf8mb4_unicode_ci'), index=True, nullable=False, unique=True)\r\n    # <...snip...>\r\n\r\n    file_id = db.Column(db.Integer, db.ForeignKey('tumbleweed_post_file.id'))\r\n    file = db.relationship(\r\n        'TumbleweedPostFile',\r\n        backref=db.backref('posts', lazy='dynamic'),\r\n        foreign_keys=file_id\r\n    )\r\n\r\n    thumbnail_id = db.Column(db.Integer, db.ForeignKey('tumbleweed_post_thumbnail.id'))\r\n    thumbnail = db.relationship(\r\n        'TumbleweedPostThumbnail',\r\n        backref=db.backref('post', lazy='dynamic'),\r\n        foreign_keys=thumbnail_id\r\n    )\r\n\r\n    json_id = db.Column(db.Integer, db.ForeignKey('tumbleweed_post_json.id'))\r\n    json = db.relationship(\r\n        'TumbleweedPostJson',\r\n        backref=db.backref('post', lazy='dynamic'),\r\n        foreign_keys=json_id\r\n    )\r\n\r\n    tags = db.relationship(\r\n        'TumbleweedTag',\r\n        secondary=tumbleweed_post_tags,\r\n        backref=db.backref('posts', lazy='dynamic'),\r\n        lazy='dynamic'\r\n    )\r\n\r\n    def __init__(self, **kwargs):\r\n        for c in self.__table__.columns:\r\n            c_data = kwargs.pop(c.key, None)\r\n            if c_data:\r\n                setattr(self, c.key, c_data)\r\n\r\n    def __repr__(self):\r\n        return str('<{} id={}, post_id={}, blog_found={}>').format(self.__class__.__name__, self.id, self.post_id, self.blog_found)\r\n```\r\n\r\nThe endpoint (all model endpoints are essentially the same for the time being due to testing):\r\n```\r\nrestless_manager.create_api(\r\n    tumbleweed_db.TumbleweedPost,\r\n    url_prefix='/api/v1',\r\n    collection_name='post',\r\n    methods=['GET', 'POST', 'PUT', 'PATCH']\r\n)\r\n```\r\n\r\nThe request:\r\n```\r\n╭─jamie@BeefCurtainMoses  ~\r\n╰─$ time curl -X GET -H 'Accept: application/vnd.api+json' 'http://0.0.0.0:7777/api/v1/post'\r\n{\r\n  \"data\": [\r\n    <...snip...>\r\n    {\r\n      \"attributes\": {\r\n        \"adult\": false,\r\n        \"blog_found\": \"<snip>\",\r\n        \"blog_source\": \"<snip>\",\r\n        \"downloaded\": true,\r\n        \"post_id\": \"<snip>\"\r\n      },\r\n      \"id\": \"10\",\r\n      \"links\": {\r\n        \"self\": \"http://0.0.0.0:7777/api/v1/post/10\"\r\n      },\r\n      \"relationships\": {\r\n        \"file\": {\r\n          \"data\": {\r\n            \"id\": \"10\",\r\n            \"type\": \"post_file\"\r\n          },\r\n          \"links\": {\r\n            \"related\": \"/api/v1/post/10/file\",\r\n            \"self\": \"/api/v1/post/10/relationships/file\"\r\n          }\r\n        },\r\n        \"json\": {\r\n          \"data\": {\r\n            \"id\": \"10\",\r\n            \"type\": \"post_json\"\r\n          },\r\n          \"links\": {\r\n            \"related\": \"/api/v1/post/10/json\",\r\n            \"self\": \"/api/v1/post/10/relationships/json\"\r\n          }\r\n        },\r\n        \"tags\": {\r\n          \"data\": [],\r\n          \"links\": {\r\n            \"related\": \"/api/v1/post/10/tags\",\r\n            \"self\": \"/api/v1/post/10/relationships/tags\"\r\n          }\r\n        },\r\n        \"thumbnail\": {\r\n          \"data\": {\r\n            \"id\": \"9\",\r\n            \"type\": \"post_thumbnail\"\r\n          },\r\n          \"links\": {\r\n            \"related\": \"/api/v1/post/10/thumbnail\",\r\n            \"self\": \"/api/v1/post/10/relationships/thumbnail\"\r\n          }\r\n        }\r\n      },\r\n      \"type\": \"post\"\r\n    }\r\n  ],\r\n  \"included\": [],\r\n  \"jsonapi\": {\r\n    \"version\": \"1.0\"\r\n  },\r\n  \"links\": {\r\n    \"first\": \"http://0.0.0.0:7777/api/v1/post?page[number]=1&page[size]=10\",\r\n    \"last\": \"http://0.0.0.0:7777/api/v1/post?page[number]=68368&page[size]=10\",\r\n    \"next\": \"http://0.0.0.0:7777/api/v1/post?page[number]=2&page[size]=10\",\r\n    \"prev\": \"http://0.0.0.0:7777/api/v1/post?page[number]=0&page[size]=10\",\r\n    \"self\": \"/api/v1/post\"\r\n  },\r\n  \"meta\": {\r\n    \"total\": 683672\r\n  }\r\n}\r\ncurl -X GET -H 'Accept: application/vnd.api+json'   0.00s user 0.01s system 0% cpu 1:06.46 total\r\n```\r\n\r\nAnd the logs:\r\n```\r\n2016-07-06 10:22:38,403 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)\r\n2016-07-06 10:22:38,404 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_post.id AS tumbleweed_post_id, tumbleweed_post.post_id AS tumbleweed_post_post_id, tumbleweed_post.blog_source AS tumbleweed_post_blog_source, tumbleweed_post.blog_found AS tumbleweed_post_blog_found, tumbleweed_post.downloaded AS tumbleweed_post_downloaded, tumbleweed_post.adult AS tumbleweed_post_adult, tumbleweed_post.file_id AS tumbleweed_post_file_id, tumbleweed_post.thumbnail_id AS tumbleweed_post_thumbnail_id, tumbleweed_post.json_id AS tumbleweed_post_json_id \r\nFROM tumbleweed_post ORDER BY tumbleweed_post.id ASC \r\n LIMIT %s, %s\r\n2016-07-06 10:22:38,404 INFO sqlalchemy.engine.base.Engine (0, 10)\r\n2016-07-06 10:22:38,448 INFO sqlalchemy.engine.base.Engine SELECT count(*) AS count_1 \r\nFROM (SELECT tumbleweed_post.id AS tumbleweed_post_id, tumbleweed_post.post_id AS tumbleweed_post_post_id, tumbleweed_post.blog_source AS tumbleweed_post_blog_source, tumbleweed_post.blog_found AS tumbleweed_post_blog_found, tumbleweed_post.downloaded AS tumbleweed_post_downloaded, tumbleweed_post.adult AS tumbleweed_post_adult, tumbleweed_post.file_id AS tumbleweed_post_file_id, tumbleweed_post.thumbnail_id AS tumbleweed_post_thumbnail_id, tumbleweed_post.json_id AS tumbleweed_post_json_id \r\nFROM tumbleweed_post) AS anon_1\r\n2016-07-06 10:22:38,448 INFO sqlalchemy.engine.base.Engine ()\r\n2016-07-06 10:22:38,745 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_post_file.id AS tumbleweed_post_file_id, tumbleweed_post_file.name AS tumbleweed_post_file_name, tumbleweed_post_file.adult AS tumbleweed_post_file_adult, tumbleweed_post_file.full_path AS tumbleweed_post_file_full_path, tumbleweed_post_file.new_path AS tumbleweed_post_file_new_path, tumbleweed_post_file.source_url AS tumbleweed_post_file_source_url, tumbleweed_post_file.content_type AS tumbleweed_post_file_content_type, tumbleweed_post_file.downloaded AS tumbleweed_post_file_downloaded, tumbleweed_post_file.size AS tumbleweed_post_file_size, tumbleweed_post_file.error AS tumbleweed_post_file_error, tumbleweed_post_file.error_code AS tumbleweed_post_file_error_code, tumbleweed_post_file.json_id AS tumbleweed_post_file_json_id \r\nFROM tumbleweed_post_file \r\nWHERE tumbleweed_post_file.id = %s\r\n2016-07-06 10:22:38,745 INFO sqlalchemy.engine.base.Engine (1L,)\r\n2016-07-06 10:22:38,786 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_post_thumbnail.id AS tumbleweed_post_thumbnail_id, tumbleweed_post_thumbnail.name AS tumbleweed_post_thumbnail_name, tumbleweed_post_thumbnail.data_base64 AS tumbleweed_post_thumbnail_data_base64, tumbleweed_post_thumbnail.source_url AS tumbleweed_post_thumbnail_source_url, tumbleweed_post_thumbnail.content_type AS tumbleweed_post_thumbnail_content_type, tumbleweed_post_thumbnail.size AS tumbleweed_post_thumbnail_size, tumbleweed_post_thumbnail.error AS tumbleweed_post_thumbnail_error, tumbleweed_post_thumbnail.error_code AS tumbleweed_post_thumbnail_error_code \r\nFROM tumbleweed_post_thumbnail \r\nWHERE tumbleweed_post_thumbnail.id = %s\r\n2016-07-06 10:22:38,786 INFO sqlalchemy.engine.base.Engine (1L,)\r\n2016-07-06 10:22:38,861 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_post_json.id AS tumbleweed_post_json_id, tumbleweed_post_json.json AS tumbleweed_post_json_json \r\nFROM tumbleweed_post_json \r\nWHERE tumbleweed_post_json.id = %s\r\n2016-07-06 10:22:38,861 INFO sqlalchemy.engine.base.Engine (1L,)\r\n2016-07-06 10:22:38,900 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_tag.id AS tumbleweed_tag_id, tumbleweed_tag.name AS tumbleweed_tag_name \r\nFROM tumbleweed_tag, tumbleweed_post_tags \r\nWHERE %s = tumbleweed_post_tags.post_id AND tumbleweed_tag.id = tumbleweed_post_tags.tag_id\r\n2016-07-06 10:22:38,901 INFO sqlalchemy.engine.base.Engine (1L,)\r\n2016-07-06 10:22:38,938 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_post_file.id AS tumbleweed_post_file_id, tumbleweed_post_file.name AS tumbleweed_post_file_name, tumbleweed_post_file.adult AS tumbleweed_post_file_adult, tumbleweed_post_file.full_path AS tumbleweed_post_file_full_path, tumbleweed_post_file.new_path AS tumbleweed_post_file_new_path, tumbleweed_post_file.source_url AS tumbleweed_post_file_source_url, tumbleweed_post_file.content_type AS tumbleweed_post_file_content_type, tumbleweed_post_file.downloaded AS tumbleweed_post_file_downloaded, tumbleweed_post_file.size AS tumbleweed_post_file_size, tumbleweed_post_file.error AS tumbleweed_post_file_error, tumbleweed_post_file.error_code AS tumbleweed_post_file_error_code, tumbleweed_post_file.json_id AS tumbleweed_post_file_json_id \r\nFROM tumbleweed_post_file \r\nWHERE tumbleweed_post_file.id = %s\r\n2016-07-06 10:22:38,938 INFO sqlalchemy.engine.base.Engine (2L,)\r\n2016-07-06 10:22:38,973 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_post_thumbnail.id AS tumbleweed_post_thumbnail_id, tumbleweed_post_thumbnail.name AS tumbleweed_post_thumbnail_name, tumbleweed_post_thumbnail.data_base64 AS tumbleweed_post_thumbnail_data_base64, tumbleweed_post_thumbnail.source_url AS tumbleweed_post_thumbnail_source_url, tumbleweed_post_thumbnail.content_type AS tumbleweed_post_thumbnail_content_type, tumbleweed_post_thumbnail.size AS tumbleweed_post_thumbnail_size, tumbleweed_post_thumbnail.error AS tumbleweed_post_thumbnail_error, tumbleweed_post_thumbnail.error_code AS tumbleweed_post_thumbnail_error_code \r\nFROM tumbleweed_post_thumbnail \r\nWHERE tumbleweed_post_thumbnail.id = %s\r\n2016-07-06 10:22:38,973 INFO sqlalchemy.engine.base.Engine (3L,)\r\n2016-07-06 10:22:39,017 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_post_json.id AS tumbleweed_post_json_id, tumbleweed_post_json.json AS tumbleweed_post_json_json \r\nFROM tumbleweed_post_json \r\nWHERE tumbleweed_post_json.id = %s\r\n2016-07-06 10:22:39,017 INFO sqlalchemy.engine.base.Engine (2L,)\r\n2016-07-06 10:22:39,052 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_tag.id AS tumbleweed_tag_id, tumbleweed_tag.name AS tumbleweed_tag_name \r\nFROM tumbleweed_tag, tumbleweed_post_tags \r\nWHERE %s = tumbleweed_post_tags.post_id AND tumbleweed_tag.id = tumbleweed_post_tags.tag_id\r\n2016-07-06 10:22:39,052 INFO sqlalchemy.engine.base.Engine (2L,)\r\n2016-07-06 10:22:39,086 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_post_file.id AS tumbleweed_post_file_id, tumbleweed_post_file.name AS tumbleweed_post_file_name, tumbleweed_post_file.adult AS tumbleweed_post_file_adult, tumbleweed_post_file.full_path AS tumbleweed_post_file_full_path, tumbleweed_post_file.new_path AS tumbleweed_post_file_new_path, tumbleweed_post_file.source_url AS tumbleweed_post_file_source_url, tumbleweed_post_file.content_type AS tumbleweed_post_file_content_type, tumbleweed_post_file.downloaded AS tumbleweed_post_file_downloaded, tumbleweed_post_file.size AS tumbleweed_post_file_size, tumbleweed_post_file.error AS tumbleweed_post_file_error, tumbleweed_post_file.error_code AS tumbleweed_post_file_error_code, tumbleweed_post_file.json_id AS tumbleweed_post_file_json_id \r\nFROM tumbleweed_post_file \r\nWHERE tumbleweed_post_file.id = %s\r\n2016-07-06 10:22:39,086 INFO sqlalchemy.engine.base.Engine (3L,)\r\n2016-07-06 10:22:39,122 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_post_thumbnail.id AS tumbleweed_post_thumbnail_id, tumbleweed_post_thumbnail.name AS tumbleweed_post_thumbnail_name, tumbleweed_post_thumbnail.data_base64 AS tumbleweed_post_thumbnail_data_base64, tumbleweed_post_thumbnail.source_url AS tumbleweed_post_thumbnail_source_url, tumbleweed_post_thumbnail.content_type AS tumbleweed_post_thumbnail_content_type, tumbleweed_post_thumbnail.size AS tumbleweed_post_thumbnail_size, tumbleweed_post_thumbnail.error AS tumbleweed_post_thumbnail_error, tumbleweed_post_thumbnail.error_code AS tumbleweed_post_thumbnail_error_code \r\nFROM tumbleweed_post_thumbnail \r\nWHERE tumbleweed_post_thumbnail.id = %s\r\n2016-07-06 10:22:39,122 INFO sqlalchemy.engine.base.Engine (4L,)\r\n2016-07-06 10:22:39,200 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_post_json.id AS tumbleweed_post_json_id, tumbleweed_post_json.json AS tumbleweed_post_json_json \r\nFROM tumbleweed_post_json \r\nWHERE tumbleweed_post_json.id = %s\r\n2016-07-06 10:22:39,201 INFO sqlalchemy.engine.base.Engine (3L,)\r\n2016-07-06 10:22:39,244 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_tag.id AS tumbleweed_tag_id, tumbleweed_tag.name AS tumbleweed_tag_name \r\nFROM tumbleweed_tag, tumbleweed_post_tags \r\nWHERE %s = tumbleweed_post_tags.post_id AND tumbleweed_tag.id = tumbleweed_post_tags.tag_id\r\n2016-07-06 10:22:39,244 INFO sqlalchemy.engine.base.Engine (3L,)\r\n2016-07-06 10:22:39,278 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_post_file.id AS tumbleweed_post_file_id, tumbleweed_post_file.name AS tumbleweed_post_file_name, tumbleweed_post_file.adult AS tumbleweed_post_file_adult, tumbleweed_post_file.full_path AS tumbleweed_post_file_full_path, tumbleweed_post_file.new_path AS tumbleweed_post_file_new_path, tumbleweed_post_file.source_url AS tumbleweed_post_file_source_url, tumbleweed_post_file.content_type AS tumbleweed_post_file_content_type, tumbleweed_post_file.downloaded AS tumbleweed_post_file_downloaded, tumbleweed_post_file.size AS tumbleweed_post_file_size, tumbleweed_post_file.error AS tumbleweed_post_file_error, tumbleweed_post_file.error_code AS tumbleweed_post_file_error_code, tumbleweed_post_file.json_id AS tumbleweed_post_file_json_id \r\nFROM tumbleweed_post_file \r\nWHERE tumbleweed_post_file.id = %s\r\n2016-07-06 10:22:39,278 INFO sqlalchemy.engine.base.Engine (4L,)\r\n2016-07-06 10:22:39,321 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_post_thumbnail.id AS tumbleweed_post_thumbnail_id, tumbleweed_post_thumbnail.name AS tumbleweed_post_thumbnail_name, tumbleweed_post_thumbnail.data_base64 AS tumbleweed_post_thumbnail_data_base64, tumbleweed_post_thumbnail.source_url AS tumbleweed_post_thumbnail_source_url, tumbleweed_post_thumbnail.content_type AS tumbleweed_post_thumbnail_content_type, tumbleweed_post_thumbnail.size AS tumbleweed_post_thumbnail_size, tumbleweed_post_thumbnail.error AS tumbleweed_post_thumbnail_error, tumbleweed_post_thumbnail.error_code AS tumbleweed_post_thumbnail_error_code \r\nFROM tumbleweed_post_thumbnail \r\nWHERE tumbleweed_post_thumbnail.id = %s\r\n2016-07-06 10:22:39,321 INFO sqlalchemy.engine.base.Engine (2L,)\r\n2016-07-06 10:22:39,366 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_post_json.id AS tumbleweed_post_json_id, tumbleweed_post_json.json AS tumbleweed_post_json_json \r\nFROM tumbleweed_post_json \r\nWHERE tumbleweed_post_json.id = %s\r\n2016-07-06 10:22:39,366 INFO sqlalchemy.engine.base.Engine (4L,)\r\n2016-07-06 10:22:39,410 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_tag.id AS tumbleweed_tag_id, tumbleweed_tag.name AS tumbleweed_tag_name \r\nFROM tumbleweed_tag, tumbleweed_post_tags \r\nWHERE %s = tumbleweed_post_tags.post_id AND tumbleweed_tag.id = tumbleweed_post_tags.tag_id\r\n2016-07-06 10:22:39,410 INFO sqlalchemy.engine.base.Engine (4L,)\r\n2016-07-06 10:22:39,453 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_post_file.id AS tumbleweed_post_file_id, tumbleweed_post_file.name AS tumbleweed_post_file_name, tumbleweed_post_file.adult AS tumbleweed_post_file_adult, tumbleweed_post_file.full_path AS tumbleweed_post_file_full_path, tumbleweed_post_file.new_path AS tumbleweed_post_file_new_path, tumbleweed_post_file.source_url AS tumbleweed_post_file_source_url, tumbleweed_post_file.content_type AS tumbleweed_post_file_content_type, tumbleweed_post_file.downloaded AS tumbleweed_post_file_downloaded, tumbleweed_post_file.size AS tumbleweed_post_file_size, tumbleweed_post_file.error AS tumbleweed_post_file_error, tumbleweed_post_file.error_code AS tumbleweed_post_file_error_code, tumbleweed_post_file.json_id AS tumbleweed_post_file_json_id \r\nFROM tumbleweed_post_file \r\nWHERE tumbleweed_post_file.id = %s\r\n2016-07-06 10:22:39,453 INFO sqlalchemy.engine.base.Engine (5L,)\r\n2016-07-06 10:22:39,489 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_post_thumbnail.id AS tumbleweed_post_thumbnail_id, tumbleweed_post_thumbnail.name AS tumbleweed_post_thumbnail_name, tumbleweed_post_thumbnail.data_base64 AS tumbleweed_post_thumbnail_data_base64, tumbleweed_post_thumbnail.source_url AS tumbleweed_post_thumbnail_source_url, tumbleweed_post_thumbnail.content_type AS tumbleweed_post_thumbnail_content_type, tumbleweed_post_thumbnail.size AS tumbleweed_post_thumbnail_size, tumbleweed_post_thumbnail.error AS tumbleweed_post_thumbnail_error, tumbleweed_post_thumbnail.error_code AS tumbleweed_post_thumbnail_error_code \r\nFROM tumbleweed_post_thumbnail \r\nWHERE tumbleweed_post_thumbnail.id = %s\r\n2016-07-06 10:22:39,489 INFO sqlalchemy.engine.base.Engine (5L,)\r\n2016-07-06 10:22:39,543 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_post_json.id AS tumbleweed_post_json_id, tumbleweed_post_json.json AS tumbleweed_post_json_json \r\nFROM tumbleweed_post_json \r\nWHERE tumbleweed_post_json.id = %s\r\n2016-07-06 10:22:39,543 INFO sqlalchemy.engine.base.Engine (5L,)\r\n2016-07-06 10:22:39,583 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_tag.id AS tumbleweed_tag_id, tumbleweed_tag.name AS tumbleweed_tag_name \r\nFROM tumbleweed_tag, tumbleweed_post_tags \r\nWHERE %s = tumbleweed_post_tags.post_id AND tumbleweed_tag.id = tumbleweed_post_tags.tag_id\r\n2016-07-06 10:22:39,583 INFO sqlalchemy.engine.base.Engine (5L,)\r\n2016-07-06 10:22:39,621 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_post_file.id AS tumbleweed_post_file_id, tumbleweed_post_file.name AS tumbleweed_post_file_name, tumbleweed_post_file.adult AS tumbleweed_post_file_adult, tumbleweed_post_file.full_path AS tumbleweed_post_file_full_path, tumbleweed_post_file.new_path AS tumbleweed_post_file_new_path, tumbleweed_post_file.source_url AS tumbleweed_post_file_source_url, tumbleweed_post_file.content_type AS tumbleweed_post_file_content_type, tumbleweed_post_file.downloaded AS tumbleweed_post_file_downloaded, tumbleweed_post_file.size AS tumbleweed_post_file_size, tumbleweed_post_file.error AS tumbleweed_post_file_error, tumbleweed_post_file.error_code AS tumbleweed_post_file_error_code, tumbleweed_post_file.json_id AS tumbleweed_post_file_json_id \r\nFROM tumbleweed_post_file \r\nWHERE tumbleweed_post_file.id = %s\r\n2016-07-06 10:22:39,621 INFO sqlalchemy.engine.base.Engine (7L,)\r\n2016-07-06 10:22:39,656 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_post_json.id AS tumbleweed_post_json_id, tumbleweed_post_json.json AS tumbleweed_post_json_json \r\nFROM tumbleweed_post_json \r\nWHERE tumbleweed_post_json.id = %s\r\n2016-07-06 10:22:39,656 INFO sqlalchemy.engine.base.Engine (7L,)\r\n2016-07-06 10:22:39,692 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_tag.id AS tumbleweed_tag_id, tumbleweed_tag.name AS tumbleweed_tag_name \r\nFROM tumbleweed_tag, tumbleweed_post_tags \r\nWHERE %s = tumbleweed_post_tags.post_id AND tumbleweed_tag.id = tumbleweed_post_tags.tag_id\r\n2016-07-06 10:22:39,692 INFO sqlalchemy.engine.base.Engine (6L,)\r\n2016-07-06 10:22:39,728 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_post_file.id AS tumbleweed_post_file_id, tumbleweed_post_file.name AS tumbleweed_post_file_name, tumbleweed_post_file.adult AS tumbleweed_post_file_adult, tumbleweed_post_file.full_path AS tumbleweed_post_file_full_path, tumbleweed_post_file.new_path AS tumbleweed_post_file_new_path, tumbleweed_post_file.source_url AS tumbleweed_post_file_source_url, tumbleweed_post_file.content_type AS tumbleweed_post_file_content_type, tumbleweed_post_file.downloaded AS tumbleweed_post_file_downloaded, tumbleweed_post_file.size AS tumbleweed_post_file_size, tumbleweed_post_file.error AS tumbleweed_post_file_error, tumbleweed_post_file.error_code AS tumbleweed_post_file_error_code, tumbleweed_post_file.json_id AS tumbleweed_post_file_json_id \r\nFROM tumbleweed_post_file \r\nWHERE tumbleweed_post_file.id = %s\r\n2016-07-06 10:22:39,728 INFO sqlalchemy.engine.base.Engine (6L,)\r\n2016-07-06 10:22:39,765 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_post_thumbnail.id AS tumbleweed_post_thumbnail_id, tumbleweed_post_thumbnail.name AS tumbleweed_post_thumbnail_name, tumbleweed_post_thumbnail.data_base64 AS tumbleweed_post_thumbnail_data_base64, tumbleweed_post_thumbnail.source_url AS tumbleweed_post_thumbnail_source_url, tumbleweed_post_thumbnail.content_type AS tumbleweed_post_thumbnail_content_type, tumbleweed_post_thumbnail.size AS tumbleweed_post_thumbnail_size, tumbleweed_post_thumbnail.error AS tumbleweed_post_thumbnail_error, tumbleweed_post_thumbnail.error_code AS tumbleweed_post_thumbnail_error_code \r\nFROM tumbleweed_post_thumbnail \r\nWHERE tumbleweed_post_thumbnail.id = %s\r\n2016-07-06 10:22:39,765 INFO sqlalchemy.engine.base.Engine (6L,)\r\n2016-07-06 10:22:39,811 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_post_json.id AS tumbleweed_post_json_id, tumbleweed_post_json.json AS tumbleweed_post_json_json \r\nFROM tumbleweed_post_json \r\nWHERE tumbleweed_post_json.id = %s\r\n2016-07-06 10:22:39,811 INFO sqlalchemy.engine.base.Engine (6L,)\r\n2016-07-06 10:22:39,864 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_tag.id AS tumbleweed_tag_id, tumbleweed_tag.name AS tumbleweed_tag_name \r\nFROM tumbleweed_tag, tumbleweed_post_tags \r\nWHERE %s = tumbleweed_post_tags.post_id AND tumbleweed_tag.id = tumbleweed_post_tags.tag_id\r\n2016-07-06 10:22:39,864 INFO sqlalchemy.engine.base.Engine (7L,)\r\n2016-07-06 10:22:39,905 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_post_file.id AS tumbleweed_post_file_id, tumbleweed_post_file.name AS tumbleweed_post_file_name, tumbleweed_post_file.adult AS tumbleweed_post_file_adult, tumbleweed_post_file.full_path AS tumbleweed_post_file_full_path, tumbleweed_post_file.new_path AS tumbleweed_post_file_new_path, tumbleweed_post_file.source_url AS tumbleweed_post_file_source_url, tumbleweed_post_file.content_type AS tumbleweed_post_file_content_type, tumbleweed_post_file.downloaded AS tumbleweed_post_file_downloaded, tumbleweed_post_file.size AS tumbleweed_post_file_size, tumbleweed_post_file.error AS tumbleweed_post_file_error, tumbleweed_post_file.error_code AS tumbleweed_post_file_error_code, tumbleweed_post_file.json_id AS tumbleweed_post_file_json_id \r\nFROM tumbleweed_post_file \r\nWHERE tumbleweed_post_file.id = %s\r\n2016-07-06 10:22:39,905 INFO sqlalchemy.engine.base.Engine (8L,)\r\n2016-07-06 10:22:39,944 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_post_thumbnail.id AS tumbleweed_post_thumbnail_id, tumbleweed_post_thumbnail.name AS tumbleweed_post_thumbnail_name, tumbleweed_post_thumbnail.data_base64 AS tumbleweed_post_thumbnail_data_base64, tumbleweed_post_thumbnail.source_url AS tumbleweed_post_thumbnail_source_url, tumbleweed_post_thumbnail.content_type AS tumbleweed_post_thumbnail_content_type, tumbleweed_post_thumbnail.size AS tumbleweed_post_thumbnail_size, tumbleweed_post_thumbnail.error AS tumbleweed_post_thumbnail_error, tumbleweed_post_thumbnail.error_code AS tumbleweed_post_thumbnail_error_code \r\nFROM tumbleweed_post_thumbnail \r\nWHERE tumbleweed_post_thumbnail.id = %s\r\n2016-07-06 10:22:39,944 INFO sqlalchemy.engine.base.Engine (7L,)\r\n2016-07-06 10:22:40,003 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_post_json.id AS tumbleweed_post_json_id, tumbleweed_post_json.json AS tumbleweed_post_json_json \r\nFROM tumbleweed_post_json \r\nWHERE tumbleweed_post_json.id = %s\r\n2016-07-06 10:22:40,003 INFO sqlalchemy.engine.base.Engine (8L,)\r\n2016-07-06 10:22:40,046 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_tag.id AS tumbleweed_tag_id, tumbleweed_tag.name AS tumbleweed_tag_name \r\nFROM tumbleweed_tag, tumbleweed_post_tags \r\nWHERE %s = tumbleweed_post_tags.post_id AND tumbleweed_tag.id = tumbleweed_post_tags.tag_id\r\n2016-07-06 10:22:40,047 INFO sqlalchemy.engine.base.Engine (8L,)\r\n2016-07-06 10:22:40,091 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_post_file.id AS tumbleweed_post_file_id, tumbleweed_post_file.name AS tumbleweed_post_file_name, tumbleweed_post_file.adult AS tumbleweed_post_file_adult, tumbleweed_post_file.full_path AS tumbleweed_post_file_full_path, tumbleweed_post_file.new_path AS tumbleweed_post_file_new_path, tumbleweed_post_file.source_url AS tumbleweed_post_file_source_url, tumbleweed_post_file.content_type AS tumbleweed_post_file_content_type, tumbleweed_post_file.downloaded AS tumbleweed_post_file_downloaded, tumbleweed_post_file.size AS tumbleweed_post_file_size, tumbleweed_post_file.error AS tumbleweed_post_file_error, tumbleweed_post_file.error_code AS tumbleweed_post_file_error_code, tumbleweed_post_file.json_id AS tumbleweed_post_file_json_id \r\nFROM tumbleweed_post_file \r\nWHERE tumbleweed_post_file.id = %s\r\n2016-07-06 10:22:40,091 INFO sqlalchemy.engine.base.Engine (9L,)\r\n2016-07-06 10:22:40,129 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_post_thumbnail.id AS tumbleweed_post_thumbnail_id, tumbleweed_post_thumbnail.name AS tumbleweed_post_thumbnail_name, tumbleweed_post_thumbnail.data_base64 AS tumbleweed_post_thumbnail_data_base64, tumbleweed_post_thumbnail.source_url AS tumbleweed_post_thumbnail_source_url, tumbleweed_post_thumbnail.content_type AS tumbleweed_post_thumbnail_content_type, tumbleweed_post_thumbnail.size AS tumbleweed_post_thumbnail_size, tumbleweed_post_thumbnail.error AS tumbleweed_post_thumbnail_error, tumbleweed_post_thumbnail.error_code AS tumbleweed_post_thumbnail_error_code \r\nFROM tumbleweed_post_thumbnail \r\nWHERE tumbleweed_post_thumbnail.id = %s\r\n2016-07-06 10:22:40,129 INFO sqlalchemy.engine.base.Engine (8L,)\r\n2016-07-06 10:22:40,171 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_post_json.id AS tumbleweed_post_json_id, tumbleweed_post_json.json AS tumbleweed_post_json_json \r\nFROM tumbleweed_post_json \r\nWHERE tumbleweed_post_json.id = %s\r\n2016-07-06 10:22:40,171 INFO sqlalchemy.engine.base.Engine (9L,)\r\n2016-07-06 10:22:40,211 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_tag.id AS tumbleweed_tag_id, tumbleweed_tag.name AS tumbleweed_tag_name \r\nFROM tumbleweed_tag, tumbleweed_post_tags \r\nWHERE %s = tumbleweed_post_tags.post_id AND tumbleweed_tag.id = tumbleweed_post_tags.tag_id\r\n2016-07-06 10:22:40,212 INFO sqlalchemy.engine.base.Engine (9L,)\r\n2016-07-06 10:22:40,250 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_post_file.id AS tumbleweed_post_file_id, tumbleweed_post_file.name AS tumbleweed_post_file_name, tumbleweed_post_file.adult AS tumbleweed_post_file_adult, tumbleweed_post_file.full_path AS tumbleweed_post_file_full_path, tumbleweed_post_file.new_path AS tumbleweed_post_file_new_path, tumbleweed_post_file.source_url AS tumbleweed_post_file_source_url, tumbleweed_post_file.content_type AS tumbleweed_post_file_content_type, tumbleweed_post_file.downloaded AS tumbleweed_post_file_downloaded, tumbleweed_post_file.size AS tumbleweed_post_file_size, tumbleweed_post_file.error AS tumbleweed_post_file_error, tumbleweed_post_file.error_code AS tumbleweed_post_file_error_code, tumbleweed_post_file.json_id AS tumbleweed_post_file_json_id \r\nFROM tumbleweed_post_file \r\nWHERE tumbleweed_post_file.id = %s\r\n2016-07-06 10:22:40,250 INFO sqlalchemy.engine.base.Engine (10L,)\r\n2016-07-06 10:22:40,286 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_post_thumbnail.id AS tumbleweed_post_thumbnail_id, tumbleweed_post_thumbnail.name AS tumbleweed_post_thumbnail_name, tumbleweed_post_thumbnail.data_base64 AS tumbleweed_post_thumbnail_data_base64, tumbleweed_post_thumbnail.source_url AS tumbleweed_post_thumbnail_source_url, tumbleweed_post_thumbnail.content_type AS tumbleweed_post_thumbnail_content_type, tumbleweed_post_thumbnail.size AS tumbleweed_post_thumbnail_size, tumbleweed_post_thumbnail.error AS tumbleweed_post_thumbnail_error, tumbleweed_post_thumbnail.error_code AS tumbleweed_post_thumbnail_error_code \r\nFROM tumbleweed_post_thumbnail \r\nWHERE tumbleweed_post_thumbnail.id = %s\r\n2016-07-06 10:22:40,286 INFO sqlalchemy.engine.base.Engine (9L,)\r\n2016-07-06 10:22:40,335 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_post_json.id AS tumbleweed_post_json_id, tumbleweed_post_json.json AS tumbleweed_post_json_json \r\nFROM tumbleweed_post_json \r\nWHERE tumbleweed_post_json.id = %s\r\n2016-07-06 10:22:40,335 INFO sqlalchemy.engine.base.Engine (10L,)\r\n2016-07-06 10:22:40,371 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_tag.id AS tumbleweed_tag_id, tumbleweed_tag.name AS tumbleweed_tag_name \r\nFROM tumbleweed_tag, tumbleweed_post_tags \r\nWHERE %s = tumbleweed_post_tags.post_id AND tumbleweed_tag.id = tumbleweed_post_tags.tag_id\r\n2016-07-06 10:22:40,371 INFO sqlalchemy.engine.base.Engine (10L,)\r\n2016-07-06 10:22:40,405 INFO sqlalchemy.engine.base.Engine SELECT tumbleweed_post.id AS tumbleweed_post_id, tumbleweed_post.post_id AS tumbleweed_post_post_id, tumbleweed_post.blog_source AS tumbleweed_post_blog_source, tumbleweed_post.blog_found AS tumbleweed_post_blog_found, tumbleweed_post.downloaded AS tumbleweed_post_downloaded, tumbleweed_post.adult AS tumbleweed_post_adult, tumbleweed_post.file_id AS tumbleweed_post_file_id, tumbleweed_post.thumbnail_id AS tumbleweed_post_thumbnail_id, tumbleweed_post.json_id AS tumbleweed_post_json_id \r\nFROM tumbleweed_post ORDER BY tumbleweed_post.id ASC\r\n2016-07-06 10:22:40,405 INFO sqlalchemy.engine.base.Engine ()\r\n2016-07-06 10:23:44,436 INFO sqlalchemy.engine.base.Engine ROLLBACK\r\n127.0.0.1 - - [06/Jul/2016 10:23:44] \"GET /api/v1/post HTTP/1.1\" 200 -\r\n--------------------------------------------------------------------------------\r\nPATH: '/api/v1/post'\r\n         21979628 function calls (21967844 primitive calls) in 66.391 seconds\r\n\r\n   Ordered by: internal time, call count\r\n   List reduced from 1018 to 30 due to restriction <30>\r\n\r\n   ncalls  tottime  percall  cumtime  percall filename:lineno(function)\r\n       42   35.331    0.841   35.331    0.841 {method 'store_result' of '_mysql.connection' objects}\r\n   683764    7.267    0.000    7.267    0.000 /Library/Python/2.7/site-packages/sqlalchemy/orm/loading.py:478(_populate_full)\r\n   683774    3.025    0.000   14.321    0.000 /Library/Python/2.7/site-packages/sqlalchemy/orm/loading.py:360(_instance)\r\n       42    2.262    0.054    2.262    0.054 {built-in method fetch_row}\r\n       19    1.869    0.098   64.289    3.384 {map}\r\n       42    1.750    0.042    1.750    0.042 {method 'query' of '_mysql.connection' objects}\r\n   683672    1.376    0.000    7.705    0.000 /Library/Python/2.7/site-packages/Flask_Restless-1.0.0b2.dev0-py2.7.egg/flask_restless/views/base.py:1810(resources_to_include)\r\n   683764    1.084    0.000    1.084    0.000 /Library/Python/2.7/site-packages/sqlalchemy/orm/state.py:75(__init__)\r\n   683794    1.004    0.000    1.004    0.000 {method 'issuperset' of 'frozenset' objects}\r\n   683764    0.913    0.000    2.449    0.000 /Library/Python/2.7/site-packages/sqlalchemy/orm/instrumentation.py:311(new_instance)\r\n   683680    0.878    0.000    2.572    0.000 /Library/Python/2.7/site-packages/werkzeug/datastructures.py:276(get)\r\n   683764    0.750    0.000    1.257    0.000 /Library/Python/2.7/site-packages/sqlalchemy/orm/state.py:251(_cleanup)\r\n   684202    0.686    0.000    1.069    0.000 /Library/Python/2.7/site-packages/werkzeug/local.py:160(top)\r\n   683679    0.617    0.000    1.695    0.000 /Library/Python/2.7/site-packages/werkzeug/datastructures.py:393(__getitem__)\r\n   683679    0.589    0.000    1.078    0.000 /Library/Python/2.7/site-packages/werkzeug/exceptions.py:99(__init__)\r\n   683848    0.559    0.000    2.633    0.000 /Library/Python/2.7/site-packages/werkzeug/local.py:296(_get_current_object)\r\n   683817    0.513    0.000   15.624    0.000 /Library/Python/2.7/site-packages/sqlalchemy/orm/loading.py:30(instances)\r\n   683835    0.501    0.000    1.665    0.000 /Library/Python/2.7/site-packages/flask/globals.py:17(_lookup_req_object)\r\n   683679    0.488    0.000    0.488    0.000 /Library/Python/2.7/site-packages/werkzeug/exceptions.py:86(__init__)\r\n   683845    0.424    0.000    3.759    0.000 /Library/Python/2.7/site-packages/werkzeug/local.py:340(__getattr__)\r\n      129    0.410    0.003    0.600    0.005 /Library/Python/2.7/site-packages/sqlalchemy/util/_collections.py:748(unique_list)\r\n   684268    0.409    0.000    0.410    0.000 {hasattr}\r\n   683696    0.369    0.000    0.443    0.000 /Library/Python/2.7/site-packages/werkzeug/utils.py:68(__get__)\r\n1369988/1368751    0.357    0.000    2.056    0.000 {getattr}\r\n   683764    0.342    0.000    0.342    0.000 <string>:1(set)\r\n   684206    0.336    0.000    0.384    0.000 /Library/Python/2.7/site-packages/werkzeug/local.py:68(__getattr__)\r\n   683764    0.314    0.000    0.507    0.000 /Library/Python/2.7/site-packages/sqlalchemy/orm/identity.py:190(_fast_discard)\r\n   683803    0.292    0.000    0.292    0.000 /Library/Python/2.7/site-packages/sqlalchemy/orm/identity.py:145(get)\r\n   683764    0.283    0.000    0.283    0.000 /Library/Python/2.7/site-packages/sqlalchemy/orm/identity.py:140(_add_unpresent)\r\n        1    0.255    0.255    0.318    0.318 /Library/Python/2.7/site-packages/MySQLdb/connections.py:62(__init__)\r\n\r\n\r\n--------------------------------------------------------------------------------\r\n```\r\n\r\nI've tried dozens of permutations of model relationship adjustments which have had a little impact on the issue at hand. I'm really curious to where \"{map}\" is being called from; map() is used in a number of locations within flask-restless so I may need to do a little more performance profiling there.\r\n\r\nBut:\r\n* 1-2 minutes is proposterous for a query of only 10 results. I'm a firm believer, and advocate, of flask-restless so I will do anything within my power to help investigate.\r\n* The includes and excludes don't modify the query at all so what's the point of specifying what columns you want when flask-restless queries everything under the sun? \r\n* Along the lines of the aforementioned, how can I disable traversing relationships? Pre/post processing isn't going to help much here and includes/excludes are useless for modifying the query but modifying the database layout isn't going to help much considering there will still be a relationship present that will be followed (at least one level deep).\r\n* If one is going to follow the relationship regardless, why only post the object ID and reference URL and not return any other data for the relationship object? If posts are going to have a many-to-many relationship and have a \"tags\" array of tags, then why not just allow me to return the tag.name? Otherwise I will need to use REQ * NUM_TAGS calls back to the API or use the tag endpoint and search based on parameters of each post in the results -- neither are good when the work has already been half-way done.\r\n\r\nIf someone has some ideas then I am most certainly all ears! I'm hoping to get this knocked out relatively soon! Cheers!"},"comment":{"url":"https://api.github.com/repos/jfinkels/flask-restless/issues/comments/232383222","html_url":"https://github.com/jfinkels/flask-restless/issues/558#issuecomment-232383222","issue_url":"https://api.github.com/repos/jfinkels/flask-restless/issues/558","id":232383222,"user":{"login":"AlmightyOatmeal","id":12953712,"avatar_url":"https://avatars.githubusercontent.com/u/12953712?v=3","gravatar_id":"","url":"https://api.github.com/users/AlmightyOatmeal","html_url":"https://github.com/AlmightyOatmeal","followers_url":"https://api.github.com/users/AlmightyOatmeal/followers","following_url":"https://api.github.com/users/AlmightyOatmeal/following{/other_user}","gists_url":"https://api.github.com/users/AlmightyOatmeal/gists{/gist_id}","starred_url":"https://api.github.com/users/AlmightyOatmeal/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AlmightyOatmeal/subscriptions","organizations_url":"https://api.github.com/users/AlmightyOatmeal/orgs","repos_url":"https://api.github.com/users/AlmightyOatmeal/repos","events_url":"https://api.github.com/users/AlmightyOatmeal/events{/privacy}","received_events_url":"https://api.github.com/users/AlmightyOatmeal/received_events","type":"User","site_admin":false},"created_at":"2016-07-13T15:01:41Z","updated_at":"2016-07-13T15:01:41Z","body":"@jfinkels but with no includes specified, there should be no reason that the logic is being used. Also, it should not be scanning the *entire* database especially when there is nothing more to include than what was already in the model. This is where the performance hit is coming from."}}
{"actor":{"display_login":"AlmightyOatmeal"}}