PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : كمپرس كردن يك تيبل



sayeh
October 15th, 2010, 11:43
با سلام خدمت تمام دوستان اهل فن
آقا من از يك اسكريپت استفاده ميكنم كه به ازاري هر كاربر در يك تيبل به نام se_users يك بخش اضافه ميشود و با زياد شدن تعداد كاربران مقدار query مصرفي خيلي بالا رفته و سرعت سايت به شدت افت ميكند. حالا از اهالي فن خواهش ميكنم كه من رو راهنمايي كنند. و اگر كسي توانايي برطرف اين مشكل رو داره لطفا كمك كنه و هزينش رو پرداخت ميكنم.
اينم يك خروجي از query سايت

SELECT se_actions.*, se_actiontypes.actiontype_icon, se_actiontypes.actiontype_text, se_actiontypes.actiontype_media FROM se_actions LEFT JOIN se_actiontypes ON se_actions.action_actiontype_id=se_actiontypes.act iontype_id WHERE CASE WHEN se_actions.action_object_owner='user' THEN CASE WHEN se_actions.action_user_id='1964' THEN TRUE WHEN ((se_actions.action_object_privacy & @SE_PRIVACY_REGISTERED) AND '1'<>0) THEN TRUE WHEN ((se_actions.action_object_privacy & @SE_PRIVACY_ANONYMOUS) AND '1'=0) THEN TRUE WHEN ((se_actions.action_object_privacy & @SE_PRIVACY_SELF) AND se_actions.action_object_owner_id='1964') THEN TRUE WHEN ((se_actions.action_object_privacy & @SE_PRIVACY_FRIEND) AND (SELECT TRUE FROM se_friends WHERE friend_user_id1=se_actions.action_object_owner_id AND friend_user_id2='1964' AND friend_status='1' LIMIT 1)) THEN TRUE WHEN ((se_actions.action_object_privacy & @SE_PRIVACY_SUBNET) AND '1'<>0 AND (SELECT TRUE FROM se_users WHERE user_id=se_actions.action_object_owner_id AND user_subnet_id='0' LIMIT 1)) THEN TRUE WHEN ((se_actions.action_object_privacy & @SE_PRIVACY_FRIEND2) AND (SELECT TRUE FROM se_friends AS friends_primary LEFT JOIN se_users ON friends_primary.friend_user_id1=se_users.user_id LEFT JOIN se_friends AS friends_secondary ON friends_primary.friend_user_id2=friends_secondary. friend_user_id1 WHERE friends_primary.friend_user_id1=se_actions.action_ object_owner_id AND friends_secondary.friend_user_id2='1964' AND se_users.user_subnet_id='0' LIMIT 1)) THEN TRUE ELSE FALSE END WHEN se_actions.action_object_owner='group' THEN CASE WHEN ((se_actions.action_object_privacy & 64) AND '1'<>0) THEN TRUE WHEN ((se_actions.action_object_privacy & 128) AND '1'=0) THEN TRUE WHEN ((se_actions.action_object_privacy & 4) AND (SELECT TRUE FROM se_groupmembers WHERE groupmember_group_id=se_actions.action_object_owne r_id AND groupmember_user_id='1964' AND groupmember_status='1' LIMIT 1)) THEN TRUE WHEN ((se_actions.action_object_privacy & 8) AND (SELECT TRUE FROM se_friends JOIN se_groups ON se_friends.friend_user_id1=se_groups.group_user_id WHERE se_groups.group_id=se_actions.action_object_owner_ id AND friend_user_id2='1964' AND friend_status='1' LIMIT 1)) THEN TRUE WHEN ((se_actions.action_object_privacy & 16) AND (SELECT TRUE FROM se_friends JOIN se_groupmembers ON se_friends.friend_user_id1=se_groupmembers.groupme mber_user_id WHERE se_groupmembers.groupmember_group_id=se_actions.ac tion_object_owner_id AND groupmember_status='1' AND friend_user_id2='1964' AND friend_status='1' LIMIT 1)) THEN TRUE WHEN ((se_actions.action_object_privacy & 32) AND (SELECT TRUE FROM se_groupmembers LEFT JOIN se_friends AS friends_primary ON se_groupmembers.groupmember_user_id=friends_primar y.friend_user_id1 LEFT JOIN se_friends AS friends_secondary ON friends_primary.friend_user_id2=friends_secondary. friend_user_id1 WHERE groupmember_status='1' AND groupmember_group_id=se_actions.action_object_owne r_id AND friends_primary.friend_status='1' AND friends_secondary.friend_status='1' AND friends_secondary.friend_user_id2='1964' LIMIT 1)) THEN TRUE ELSE FALSE END ELSE TRUE END AND (se_actions.action_user_id='3336') AND se_actions.action_date>1283893009 ORDER BY action_date DESC LIMIT 35


با تشكر

Rezash
October 15th, 2010, 14:07
بررسي و نظر دادن در اين مورد بدون داشتن اطلاعات كامل تقريبا نا ممكن هست .
بايد يك بررسي دقيق روي سورس ، ساختار ديتابيس انجام بشه تا بشه نظر دقيقي رو داد
بعضا ايجاد تغيير در ساختار جداول براي بهينه سازي به خصوص در حجم بالا خيلي سخت ميشه و برنامه نويس بايد از قبل به فكر اين موارد باشه...
بسته نحوه كد نويسي و ساختار ديتابيس برنامه نويس ميتونه تشخيص كدوم كوئري ها اضافي هستند، با چه شيوه هايي ميشه حداقل فشار ممكن رو داشته باشيم،چه اطلاعاتي رو كش كنيم و چه اطلاعاتي رو مستقيما بگيريم
اگر بتونيد برنامه نويس اصلي سيستم رو پيدا كنيد با توجه به تسلطي كه بر كدش داره بهتر از همه ميتونه كمكتون كنه