2015-10-06 3 views
0

у меня есть эта таблица 500000 подрядMYSQL - заказ по индексированного столбца

CREATE TABLE IF NOT EXISTS `listings` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `source_id` int(10) unsigned NOT NULL, 
    `cat_id` mediumint(5) NOT NULL, 
    `title` mediumtext NOT NULL, 
    `views_point` int(10) unsigned NOT NULL DEFAULT '0', 
    `publishedon_hourly` int(10) unsigned NOT NULL DEFAULT '0', 
    PRIMARY KEY (`id`), 
    KEY `views_point` (`views_point`), 
    KEY `listings` (`publishedon_hourly`,`published`,`cat_id`,`source_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED AUTO_INCREMENT=365513 ; 

я хочу, чтобы сделать запрос, как этот

SELECT * 
FROM listings 
WHERE (
`publishedon_hourly` 
BETWEEN UNIX_TIMESTAMP('2015-09-5 12:00:00')AND UNIX_TIMESTAMP('2015-10-5 12:00:00')) AND (published =1) AND cat_id 
IN (1, 2, 3, 4, 5) 
ORDER BY views_point DESC 
LIMIT 10 

Этот запрос через некоторое время работы, как я хочу точно (see this) , но после некоторых мнений это неверно, я искал в Интернете для решения, я нашел

это: http://venublog.com/2007/11/29/mysql-how-to-avoid-filesort/ и это: http://www.getsymphony.com/discuss/issues/view/657/ и я добавить индекс views_point затем попробовал этот запрос

select t1.* 
from listings t1 
left outer join listings t2 on (t1.views_point=t2.views_point) 
order by t1.views_point 
limit 10 

и этого объяснить

enter image description here

, но я не могу добавить это условие

`publishedon_hourly` BETWEEN UNIX_TIMESTAMP('2015-09-5 12:00:00') AND UNIX_TIMESTAMP('2015-09-5 12:00:00')) AND (published =1) AND cat_id = 5 

я не знаете, какой я должен назначить (t1 или t2)?

в другой руке, что об этом способе

SELECT * 
FROM listings 
WHERE (
`publishedon_hourly` BETWEEN UNIX_TIMESTAMP('2015-09-5 00:00:00') AND UNIX_TIMESTAMP('2015-09-5 23:00:00')) 
AND (published =1) 
and views_point is not null 
ORDER BY views_point DESC limit 20 

если один не будет хорошо, может ли один скажите мне, пожалуйста, как большие блоги получить сообщения от ударов?

+3

Почему на Земле вы хотите присоединиться к себе таблицу? – Victor

+1

упростить OP, удалить неиспользуемые или не важные столбцы из 'CREATE TABLE' для OP, удалить все данные, кроме 5 записей с простым контентом. Объясните не то, что вы пытались во время других экспериментов, но как раз то, что ваш ожидаемый результат должен быть в соответствии с этими 5 примерами записей. – Alex

+1

Мы не знаем, к какой из них вам следует добавить, если вы не объясните, какой результат вы пытаетесь получить. – Barmar

ответ

1

Чтобы разделить индексы, вам следует свернуть ваш listings.

Помимо этого, учитывая, что вы сортируете по t1, почти наверняка вы должны указать t1 для всех условий.

EDIT: Используйте условие, как

`t1`.`publishedon_hourly` BETWEEN UNIX_TIMESTAMP('2015-09-5 12:00:00') AND UNIX_TIMESTAMP('2015-09-5 12:00:00')) AND (`t1`.`published` = 1) AND `t1`.`cat_id` = 5 
+0

Благодарю вас за помощь, эта проблема заставила меня сходить с ума, я могу не решить его 6 дней, не могли бы вы дать мне несколько sql-кодов, чтобы проверить его, у меня нет больших знаний в sql, пожалуйста, помогите мне –

Смежные вопросы