[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
?
Индексы есть?
select t1.name,t2.name from tmp1 t1 inner join tmp2 t2 on t1.id=t2.id - уже 20 сек.
а какие-нибудь "циклы" в mysql писать можно?
я слышал, что в pl/sql можно...
а какие-нибудь "циклы" в mysql писать можно?
я слышал, что в pl/sql можно...
не знаю что такое индексы - не пользовался
А нахрена собственно нужно ускоряться в mysql? Сделай въеб-запросник на пхп, и всё.
Эх..
id - это primary key в таблице? Если да, то это и есть индекс.
id - это primary key в таблице? Если да, то это и есть индекс.
Ну конечно нет у него никаких индексов, 10000 записей же всего, не может по стольку работать.
PS. inner join ничем не отличается от where. Так просто понятнее (некоторым
)
alter table tmp1 add key (id);
alter table tmp2 add key (id);
PS. inner join ничем не отличается от where. Так просто понятнее (некоторым
)> id - это primary key в таблице?
>> create table tmp1 (id int,name varchar(100
Судя по всему, нет.
И тогда тормоза уже вполне понятны --- количество операций порядка (количество элементов в tbl1)*(количество элементов в tbl2).
---
...Я работаю...
>> create table tmp1 (id int,name varchar(100
Судя по всему, нет.
И тогда тормоза уже вполне понятны --- количество операций порядка (количество элементов в tbl1)*(количество элементов в tbl2).
---
...Я работаю...
create table tmp1 (id int,name varchar(100Ясно, что индекса нет, я уточнил просто.
круто! меньше секунды!
дайте еще плиз ссылку почитать про индексы
(кроме документации на сайте mysql)
Спасибо всем.
дайте еще плиз ссылку почитать про индексы
(кроме документации на сайте mysql)
Спасибо всем.
Ае...
Ты, кстати, на приват не ответил.
Ты, кстати, на приват не ответил.

Это наглейший пиздёж. При юзании оператора запятая из mysql-client на таблице из 500000 записей сервак просто вылетает, при иннер-джойнах нет.
PS. inner join ничем не отличается от where. Так просто понятнее (некоторым )
И ещё - внутреннее пересечение не эквивалентно WHERE.
Грубо говоря, когда ты одно из полей выбираешь индексом, для него строится дерево поиска --- таким образом, время поиска по индексу в таблице с n записями с O*(n) уменьшается до O*(lnn).
Но, если в таблице большое количество индексов, то время добавления/удаления сильно увеличивается. Так что, индексы стит использовать только тогда, когда это действительно необходимо.
---
...Я работаю...
Но, если в таблице большое количество индексов, то время добавления/удаления сильно увеличивается. Так что, индексы стит использовать только тогда, когда это действительно необходимо.
---
...Я работаю...
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
если в некоторых субд это не так или выполняется за различное время, то это проблемы субд.
з.ы. [] обозначает необязательность
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?
у кого стоит 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 делал это побыстрее?