Я постараюсь объяснить себя быстро.У меня есть база данных под названием «artikli», которая содержит около 1 млн записей.В этой таблице я запускаю много разных запросов, но один из них вызывает проблемы (длительное время выполнения), когда присутствует ORDER by.
Это моя структура таблицы:
CREATE TABLE IF NOT EXISTS artikli
(
id
int(11) NOT NULL,
name
varchar(250) NOT NULL,
datum
datetime NOT NULL,
kategorije_id
int(11) default NULL,
id_valute
int(11) default NULL,
podogovoru
int(1) default '0',
cijena
decimal(10,2) default NULL,
valuta
int(1) NOT NULL default '0',
cijena_rezerva
decimal(10,0) NOT NULL,
cijena_kupi
decimal(10,0) default NULL,
cijena_akcija
decimal(10,2) NOT NULL,
period
int(3) NOT NULL default '30',
dostupnost
enum('svugdje','samobih','samomojgrad','samomojkanton') default 'svugdje',
zemlja
varchar(10) NOT NULL,
slike
varchar(500) NOT NULL,
od_s
varchar(34) default NULL,
od_id
int(10) unsigned default NULL,
vrsta
int(1) default '0',
trajanje
datetime default NULL,
izbrisan
int(1) default '0',
zakljucan
int(1) default '0',
prijava
int(3) default '0',
izdvojen
decimal(1,0) NOT NULL default '0',
izdvojen_kad
datetime NOT NULL,
izdvojen_datum
datetime NOT NULL,
sajt
int(1) default '0',
PRIMARY KEY (id
),
KEY brend
(brend
),
KEY kanton
(kanton
),
KEY datum
(datum
),
KEY cijena
(cijena
),
KEY kategorije_id
(kategorije_id
,podogovoru
,sajt
,izdvojen
,izdvojen_kad
,datum
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
И вот этот запрос:
SELECT artikli.datum as brojx,
artikli.izdvojen as i,
artikli.izdvojen_kad as ii,
artikli.cijena as cijena, artikli.name
FROM artikli
WHERE artikli.izbrisan=0 and artikli.prodano!=3
and artikli.zavrseno=0 and artikli.od_id!=0
and (artikli.sajt=0 or (artikli.sajt=1 and artikli.dostupnost='svugdje'))
and kategorije_id IN (18)
ORDER by i DESC, ii DESC, brojx DESC
LIMIT 0,20
Что я хочу сделать, это избежать файловой сортировки, которая очень медленная.