[mysql] помогите с запросом плиз
select t1.name,t2.name from tmp1 t1,tmp2 t2 where t1.id=t2.id
в иннер-джойны типа
select t1.name,
t2.name
from tmp1 t1
inner join tmp2 t2
on t1.id=t2.id
?
Индексы есть?
а какие-нибудь "циклы" в mysql писать можно?
я слышал, что в pl/sql можно...
не знаю что такое индексы - не пользовался
А нахрена собственно нужно ускоряться в mysql? Сделай въеб-запросник на пхп, и всё.
id - это primary key в таблице? Если да, то это и есть индекс.
alter table tmp1 add key (id);
alter table tmp2 add key (id);
PS. inner join ничем не отличается от where. Так просто понятнее (некоторым )
>> create table tmp1 (id int,name varchar(100
Судя по всему, нет.
И тогда тормоза уже вполне понятны --- количество операций порядка (количество элементов в tbl1)*(количество элементов в tbl2).
---
...Я работаю...
create table tmp1 (id int,name varchar(100Ясно, что индекса нет, я уточнил просто.
дайте еще плиз ссылку почитать про индексы
(кроме документации на сайте mysql)
Спасибо всем.
Ты, кстати, на приват не ответил.
Это наглейший пиздёж. При юзании оператора запятая из mysql-client на таблице из 500000 записей сервак просто вылетает, при иннер-джойнах нет.
PS. inner join ничем не отличается от where. Так просто понятнее (некоторым )
И ещё - внутреннее пересечение не эквивалентно WHERE.
Но, если в таблице большое количество индексов, то время добавления/удаления сильно увеличивается. Так что, индексы стит использовать только тогда, когда это действительно необходимо.
---
...Я работаю...
inner join ничем не отличается от where. Так просто понятнее (некоторым )А ты не путаешь с результатом работы оптимизатора?
А то для mssql и для оракл (по крайней мере не очень старых) это действительно так, но mysql запросто может и не оптимизировать.
но mysql запросто может и не оптимизировать
очень смешно
С чем конкретно ты не согласен?
И ещё - внутреннее пересечение не эквивалентно WHERE.
как раз вот это пиздешь
При юзании оператора запятая из mysql-client на таблице из 500000 записей сервак просто вылетает, при иннер-джойнах нет.
от MySql вполне ожидаемо , хуево у него с перезаписью запросов
от MySql вполне ожидаемо
да это от -а ожидаемо я никогда ничего такого не видел
автор треда такие же данные приводит, 40 сек против 20 сек, см. выше
Ну согласен, никогда не пробовал делать join без индекса
Обоснуй, хули.
как раз вот это пиздешь
Если рассуждать по-твоему, то
Select a.id
from a
where a.name LIKE 'a%'
тоже внутреннее пересечение
select t1.name,t2.name from tmp1 t1,tmp2 t2 where t1.id=t2.id
полностью эквивалентен
select t1.name, t2.name from tmp1 t1 [inner] join tmp2 t2 on t1.id=t2.id
если в некоторых субд это не так или выполняется за различное время, то это проблемы субд.
з.ы. [] обозначает необязательность
inner join ничем не отличается от where
Может быть, у российских кодеров принято так выражаться, но у российских тестеров такая хуйня в документации будет считаться браком.
у кого стоит MySQL, посмотрите планы этих двух запросов, командой EXPLAIN. Должны быть одинаковыми, а что показывает MySQL?
Это не эквивалентность, а работа оптимизатора.
причем тут индекс?
Ну в смысле когда индекс есть я разности по скорости не замечал. А без индекса вот вы говорите, разница в два раза. Хотя у меня подозрение, что просто эксперимент плохо проведен, данные в память поднялись вот и быстрее вдвое, а от того в каком виде запрос записать может и не зависит.
это работа не оптимизатора, а норма.
все отклонения - глюки и кривости.
Оставить комментарий
t332
в sql я человек неопытный, и запрос у меня работает "слишком" долго, помогите плиз ускорить.Ситуация такая. Есть две таблицы:
create table tmp1 (id int,name varchar(100
create table tmp2 (id int,name varchar(100
в каждой из них около 10000 записей.
Запрос такой (выводит пересечение этих таблиц по tmp1.id=tmp2.id):
select t1.name,t2.name from tmp1 t1,tmp2 t2 where t1.id=t2.id
выполняется около 40 секунд.
Тот же результат но используя C/C++ я получаю менее чем за секунду.
Как сделать, что бы mysql делал это побыстрее?