Evgeny777
Новичок
Приветствую всех. Имеется такой запрос:
Вот структура таблиц.
Время запроса 13 секунд. EXPLAIN:
id - select_type - table - type - possible_key - skey - key_len - ref - rows - Extra
1 - PRIMARY - tb1 - ALL - action_type - NULL - NULL - NULL - 11597 - Using where; Using filesort
3 - DEPENDENT SUBQUERY - tb2 - ref - user_id,subscriptions - user_id - 4 - const - 293 - Using where
3 - DEPENDENT SUBQUERY - tb1 - ref - action_type - action_type - 1 - const - 1735 - Using where; Using index
2 - DEPENDENT SUBQUERY - tb2 - ref - user_id,subscriptions - user_id - 4 - const - 293 - Using where
2 - DEPENDENT SUBQUERY - tb1 - range - action_type - action_type - 1 - NULL - 2799 - Using where; Using index
Не могу понять ситуацию с ключом tb1 vii_news, ключ не определен.
Пытаюсь выдать почастям с помощью скрипта:
На стороне сервера соответственно указанный выше sql запрос. грузит неимоверно.
Помогите, плиз, оптимизировать.
Код:
SELECT SQL_CALC_FOUND_ROWS tb1.ac_id,ac_user_id,action_text,action_time,action_type,obj_id
FROM`vii_news`tb1
WHERE tb1.ac_user_id
IN(
SELECT tb2.friend_id
FROM `vii_friends` tb2, `vii_news` tb1
WHERE user_id = '1'
AND tb1.action_type
IN ( 1, 2, 3 )
AND subscriptions !=2
)
ORtb1.ac_user_id
IN(
SELECT tb2.friend_id
FROM `vii_friends` tb2, `vii_news` tb1
WHERE user_id = '1'
AND tb1.action_type =11
AND subscriptions =2
)
ANDtb1.action_type
IN(1,2,3,11)
ORDER BY tb1.action_timeDESC
LIMIT0,20
Код:
CREATE TABLE IF NOT EXISTS `vii_news` (
`action_text` text NOT NULL,
`action_time` varchar(50) NOT NULL,
`ac_id` int(11) NOT NULL auto_increment,
`ac_user_id` int(11) NOT NULL,
`action_type` tinyint(11) NOT NULL,
`obj_id` int(11) NOT NULL,
`author_user_id` int(11) NOT NULL,
`for_user_id` int(11) NOT NULL,
`fasts_num` mediumint(11) NOT NULL,
`title` varchar(50) NOT NULL,
`photo` int(11) NOT NULL,
`comments` int(11) NOT NULL,
PRIMARY KEY (`ac_id`),
KEY `ac_user_id` (`ac_user_id`),
KEY `action_type` (`action_type`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=13196 ;
CREATE TABLE IF NOT EXISTS `vii_friends` (
`user_id` int(11) NOT NULL,
`from_user_id` int(11) NOT NULL,
`friend_id` int(11) NOT NULL,
`friends_date` date NOT NULL,
`for_user_id` int(11) NOT NULL,
`subscriptions` int(11) NOT NULL,
`did` int(11) NOT NULL,
`dname` varchar(50) NOT NULL,
`ddate` varchar(30) NOT NULL,
`ddownload_name` varchar(50) NOT NULL,
`duser_id` int(11) NOT NULL,
`views` int(11) NOT NULL,
`user_logged_mobile` tinyint(1) NOT NULL,
KEY `user_id` (`user_id`),
KEY `subscriptions` (`subscriptions`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
id - select_type - table - type - possible_key - skey - key_len - ref - rows - Extra
1 - PRIMARY - tb1 - ALL - action_type - NULL - NULL - NULL - 11597 - Using where; Using filesort
3 - DEPENDENT SUBQUERY - tb2 - ref - user_id,subscriptions - user_id - 4 - const - 293 - Using where
3 - DEPENDENT SUBQUERY - tb1 - ref - action_type - action_type - 1 - const - 1735 - Using where; Using index
2 - DEPENDENT SUBQUERY - tb2 - ref - user_id,subscriptions - user_id - 4 - const - 293 - Using where
2 - DEPENDENT SUBQUERY - tb1 - range - action_type - action_type - 1 - NULL - 2799 - Using where; Using index
Не могу понять ситуацию с ключом tb1 vii_news, ключ не определен.
Пытаюсь выдать почастям с помощью скрипта:
HTML:
page: function(){
var type = $('#type').val();
$('#wall_l_href_news').attr('onClick', '');
if($('#loading_news').text() == 'Показать предыдущие новости'){
textLoad('loading_news');
$.post('/index.php?go=news&type='+type, {page: 1, page_cnt: page_cnt}, function(d){
if(d != 'no_news'){
$('#news').append(d);
$('#wall_l_href_news').attr('onClick', 'news.page(\''+type+'\')');
$('#loading_news').html('Показать предыдущие новости');
page_cnt++;
} else
$('#wall_l_href_news').hide();
});
}
}
Помогите, плиз, оптимизировать.
Последнее редактирование: