who are you
SiZE
$query = Devices::find() ->select('*') ->innerJoinWith('base', false) ->asArray() ->all(); А так?
Anonymous
nfr ;t uhepbn ljkuj
Anonymous
так же грузит долго
Anonymous
даже если выставляю limit(2) все ровно грузит минут 5
who are you
select грузит долго?
Anonymous
да
who are you
да
http://shot.hsdn.org/QLAGzOV3
who are you
видишь там время есть, у тебя там прям время в минутах где селект запрос ?
who are you
ты дебагер пользуешь?
Anonymous
http://prntscr.com/go9i4x
who are you
ты не то открыл
who are you
http://shot.hsdn.org/BZjKW7EO
who are you
либо датабазе
who are you
Логс немного другое делает
Anonymous
http://prntscr.com/go9ju8
Anonymous
это 2 только записи
Karim
А база локальная хоть?
who are you
нихуясе
Anonymous
да локалка
who are you
это 2 только записи
попробуй не джоинами а двумя селектами
who are you
там чо миллионы строк без индекса ?
who are you
база умирает как будто ))) ты бы ее перезапустил на всякий случай
Anonymous
могу показать пример базы
Anonymous
сек
SiZE
план запроса покажи
Anonymous
вот таблица
Anonymous
CREATE TABLE base ( id int(11) NOT NULL AUTO_INCREMENT, date datetime DEFAULT NULL, imei varchar(100) DEFAULT NULL, gsmSignal varchar(20) DEFAULT NULL, fvVer varchar(50) DEFAULT NULL, numBills varchar(100) DEFAULT NULL, billAcceptorState varchar(50) DEFAULT NULL, id_hard varchar(200) DEFAULT NULL, type varchar(50) DEFAULT NULL, collection varchar(2) DEFAULT NULL, ZigBeeSig varchar(10) DEFAULT NULL, billCash varchar(100) DEFAULT NULL, tariff varchar(100) DEFAULT NULL, event varchar(20) DEFAULT NULL, edate datetime DEFAULT NULL, billModem varchar(50) DEFAULT NULL, sumBills varchar(50) DEFAULT NULL, ost varchar(50) DEFAULT NULL, numDev varchar(50) DEFAULT NULL, devSignal varchar(50) DEFAULT NULL, statusDev varchar(50) DEFAULT NULL, colGel varchar(50) DEFAULT NULL, colCart varchar(50) DEFAULT NULL, price varchar(50) DEFAULT NULL, timeout varchar(50) DEFAULT NULL, doorpos varchar(50) DEFAULT NULL, doorled varchar(50) DEFAULT NULL, kpVer varchar(100) DEFAULT NULL, srVer varchar(100) DEFAULT NULL, mTel varchar(100) DEFAULT NULL, sTel varchar(100) DEFAULT NULL, ksum varchar(100) DEFAULT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=3028914 DEFAULT CHARSET=utf8;
Anonymous
в каком смысле план запроса?
Павел
Из профайлера
Anonymous
http://prntscr.com/go9nga
Niko
Sergey посмотри explain первого запроса через БД
Niko
напиши комманду EXPLAIN SELECT * ...
who are you
http://prntscr.com/go9nga
у меня всегда какая то схема еще в запросах а у тебя нет такого
Niko
у тебя индексы стоят на поля id_dev и imai?? Какого они типа
who are you
http://shot.hsdn.org/y1dnzbY8
who are you
типа такая херня всегда )) не понимаю чо это
Niko
Sergey Почему у тебя такого нет? http://joxi.ru/zANMaL8flyD8V2
who are you
Sergey Почему у тебя такого нет? http://joxi.ru/zANMaL8flyD8V2
она во вкладке другой - датабазе
Anonymous
http://prntscr.com/go9pz7
Niko
Твой датасет 30 000 000!!!
Niko
конечно долго обратабывает
Anonymous
что можно сделать?
Niko
у тебя плохая связь
Niko
Sergey http://www.mysql.ru/docs/man/Estimating_performance.html
who are you
конечно долго обратабывает
там разьве не показано что нет индекса ?
who are you
подзабыл я этот эксплаин
Niko
я спрашивал про индек, подумал он сделает))) Установи вообще внешний ключ!!!
who are you
http://prntscr.com/go9pz7
у меня вот так выглядит http://shot.hsdn.org/tPkYslAq
Niko
Sergey сделай для начала индексы по этим двум полям. должно стать в 100 раз быстрей
Niko
Sergey http://www.mysql.ru/docs/man/LIMIT_optimisation.html
Niko
Sergey почитай про limit
Niko
Укажи DISTINCT!!!
Anonymous
я только что уточнил как оно должно работать, суть такова вытащить с таблицы devices все записи потом по imei вывести последнюю запись по времени для автомата
Павел
А сразу последнюю что бы не вытащить?
Niko
а зачем девайсы не понимаю
who are you
девайсы разные
Anonymous
девай это автомат, а последняя запись в таблице base это состояние автомата
Павел
Я ваще не понимаю зачем всю таблицу перебирать если нужна одна запись
Anonymous
там 10 девайсов сейчас
Anonymous
надо к каждому получить последнюю запись
Павел
Ну и?
Niko
а почему автоматов 10, а лимит стоит 2?
Павел
Выбираешь max id группируешь по девайсам
who are you
селект девайст такой то ордер бай лимит 1 и так в цикле например
Anonymous
если сделать запрос с order edate будет ли оно так же долго искать? я выставил 2 для простой проверки
Niko
лимит обычно не уменьшает скорость выборки
Павел
Но думаю проще десять запросов зафигачу ты при таком объеме таблицы
Niko
Sergey ты индексы сделал, с ними пробовал?
Anonymous
сейчас попробую с индексами
Niko
мне кажется лучше связывать не по imei, а по id. Тогда индексы будут иметь гораздо меньший размер и быстрей будет искаться
Niko
Но при таком объеме данных здесь ключевое слово "ГОРАЗДО МЕНЬШЕ РАЗМЕР"
who are you
А вообще с такими базами должны работать более опытные челы) скинь это с себя. Закопаешься
Niko
@k_o_n_s_t_a_n_t_i_n здесь простая выборка
who are you
Сейчас да а потом ?
Niko
только ключей нет и связь плохая)))
Niko
я думаю и потом тоже будет простая выборка)
who are you
Опыт нужен кароче)))
who are you
И много шишек