|
|
|
можно ли както заставить мускл не делать нужную работу?
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. тоесть о чом речь - логически понятно, что если нам надо не существование результата в юнионе, то при положительном первом селекте никчему рыскать по остальным. вот можно ли както мускл заставить не делать лишнее - explain всегда показывает что будут выполняться все подзапросы. ЗЫ другие варианты Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. полагаю суть ясна. ЗЫ если поможет, подзапросы корелированные (dependent subquery) тоесть по типу select * from target where target.field=value and not exists(select * from t1 where t1.link = target.id) and not exists (select * from t2 whre t2.link = target.id) and.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2013, 13:13:52 |
|
||
|
можно ли както заставить мускл не делать нужную работу?
|
|||
|---|---|---|---|
|
#18+
я за вариант #2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2013, 13:32:53 |
|
||
|
можно ли както заставить мускл не делать нужную работу?
|
|||
|---|---|---|---|
|
#18+
вот можно ли както мускл заставить не делать лишнее - explain всегда показывает что будут выполняться все подзапросы. EXPLAIN в принципе этого никогда не показывает. Вообще никогда. Он это не может показать. Он не показывает, что будет выполняться, а что нет. Он показывает, как будет выполняться, если будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2013, 17:01:27 |
|
||
|
можно ли както заставить мускл не делать нужную работу?
|
|||
|---|---|---|---|
|
#18+
В общем, ты почему-то решил искать ключи не там, где их потерял, а где светлее. Ты делаешь необоснованные выводы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2013, 17:03:42 |
|
||
|
можно ли както заставить мускл не делать нужную работу?
|
|||
|---|---|---|---|
|
#18+
MasterZiv, лучше бы подсказал, ответ , а не к словам придираться. тем более что и вопрос связан именно с не понимание - что именно показывает эксплейн ============= вот счас при оптимизации запроса вида select * from t where t.t1 = @target union select * from t where t.t2 = @target union select * from t where t.t3 = @target limit 10 это упростил. на поля Т№ по индексу. и експлеин показывает число строк для просмотра использую правильный индекс, для одного поля больше чем есть реально строк в базе подходящих, для двух других меньше чем есть реально. ======= так что если цепляться к словам - то, эксплейн как раз таки не показывает что будет если будет, а лиш оценивает. ЗЫ(дополнительные условия в юнионе есть, но и учитывая их цифра с эксплейна не совпадает с реальностью, и при удалении всех остальных условий, тоже не совпадает) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2013, 17:09:40 |
|
||
|
можно ли както заставить мускл не делать нужную работу?
|
|||
|---|---|---|---|
|
#18+
alex564657498765453вот счас при оптимизации запроса вида select * from t where t.t1 = @target union select * from t where t.t2 = @target union select * from t where t.t3 = @target limit 10 ... второе, что ты должен был сделать (в порядке оптимизации) - это Код: sql 1. 2. 3. 4. А первое - это обратить внимание на идиотизм исходной конструкции. limit 10 сработает только на последний субзапрос, первые два выдадут все результаты. Вряд ли тебе ЭТО нужно. Но даже если ты поступишь как по науке, и возьмёшь субзапросы в скобки - без сортировки лимит даст совершенно отфонарный и слабопредсказуемый результат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2013, 17:24:43 |
|
||
|
можно ли както заставить мускл не делать нужную работу?
|
|||
|---|---|---|---|
|
#18+
Akina... второе, что ты должен был сделать (в порядке оптимизации) - это Код: sql 1. 2. 3. 4. Насколько я помню (по крайней мере раньше так было), MySQL не использовал индексы при OR. Тоесть когда у тебя: Код: sql 1. 2. 3. 4. то MySQL выбирает один индекс (или X,или Y,или Z), и использует только его один. В то время как при использовании: Код: sql 1. 2. 3. 4. 5. каждый запрос будет использовать свой индекс, и запрос выполняется в несколько раз быстрее. Когда-то я очень попался на этом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2013, 21:23:52 |
|
||
|
можно ли както заставить мускл не делать нужную работу?
|
|||
|---|---|---|---|
|
#18+
limit 10 видишь? отсутствие сортировки видишь? выборка по одному индексу - более чем достаточно, если по нему можно отобрать 10 записей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2013, 22:57:03 |
|
||
|
можно ли както заставить мускл не делать нужную работу?
|
|||
|---|---|---|---|
|
#18+
У человека AND not exists для прохождения условия. Значит что в подовляющем числе случаев у него и 1 записи этот запрос не выдаст. Это значит что при поиске через OR, он одно поле проскочит по индексу, а для поиска по остальным полям он будет N раз перебором шерстить всю таблицу, чтобы потом сказать - "Да, действительно нету ни одной строки удовлетворяющей твоему запросу". Это не оптимально... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2013, 01:07:55 |
|
||
|
можно ли както заставить мускл не делать нужную работу?
|
|||
|---|---|---|---|
|
#18+
нащот лимита при юнионе! по документации - если хотите лимит и ордер бай для отдельного селекта поставте его в скобках с селектом да и из практики - запросс выдаст не более 10 записей так как без скобок он относиться ко всему юниону!!! нащот, почему юнион а не ИЛИ - прав человек, при юнионе используеться три индекса и вычисляеться пересечение при ИЛИ - используеться только один. или ваще долго работает, юнион быстрее но долго. оказалось легче делать три запроса к базе чем один с юнионом (20 млн записей, юнион отрабатывает за 70-80 секунд при лимит 10. этот запрос вообще делаеться в контексте апдейта update table join (select union select union select limit 10)a on a.id=table.id set .... вообщем говоря, если по отдельности, то даже с лимитом 10000 апдейт срабатывает гораздо быстрее чем выборка с юнионом(пока индекс не кеширован - до 10 секунд, при кешированом ндексе - 2-3 секунды) воопрос остаёться в силе, может кто сможет заставить мускл расматривать сразу три ситуации, и выдать быстро результат. ЗЫ хотя может стоит и остановиться на варианте выполнять их по отдеьности - ведь логика задачи гдето такова. под труйную выборку будет попадать в 100 раз больше строк, чем надо за один раунд обновить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2013, 03:09:34 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=204&tid=1835895]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
26ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 325ms |

| 0 / 0 |
