Nano Hash - криптовалюты, майнинг, программирование

SQL - присоединиться к одному подзапросу несколько раз в рамках объединения

У меня есть 4 разные таблицы, в которых хранятся разные транзакции для пользователей, и я хотел бы объединить все транзакции для некоторых конкретных пользователей. Но проблема в том, что все эти 4 таблицы содержат огромное количество данных, поэтому, когда я пытаюсь ОБЪЕДИНИТЬ их все и ПРИСОЕДИНИТЬСЯ к пользователям, вычисления занимают часы. Что я делаю:

SELECT blablabla
FROM transactions1 t1
JOIN users ON (users.id = t1.user_id AND user.state = 1 AND user.friends > 1 AND user.loc = 'Turkey')
UNION
SELECT blablabla
FROM transactions2 t2
JOIN users ON (users.id = t2.user_id AND user.state = 1 AND user.friends > 1 AND user.loc = 'Turkey')
UNION
SELECT blablabla
FROM transactions3 t3
JOIN users ON (users.id = t3.user_id AND user.state = 1 AND user.friends > 1 AND user.loc = 'Turkey')
UNION
SELECT blablabla
FROM transactions4 t4
JOIN users ON (users.id = t4.user_id AND user.state = 1 AND user.friends > 1 AND user.loc = 'Turkey')
ORDER BY date DESC

Проблема в том, что я запускаю JOIN users ON (users.id = t1.user_id AND user.state = 1 AND user.friends > 1 AND user.loc = 'Turkey') этот фильтр 4 раза, объединяя каждую таблицу транзакций с пользователями.

Как мне улучшить свой запрос, чтобы использовать передовой опыт и повысить эффективность моего запроса?

Спасибо !


Ответы:


1

Либо выберите "user.state = 1 AND user.friends > 1 AND user.loc = 'Turkey'" от ваших пользователей, используя Common Table Expression или во временную таблицу.

Затем используйте этот результат в своем Союзе.

25.10.2013

2

Вы можете попробовать что-то вроде этого:

SELECT blablabla
FROM transactions1 t1, transactions2 t2,transactions3 t3,transactions4 t4
JOIN users ON (users.id = t1.user_id OR users.id = t2.user_id OR users.id = t3.user_id 
OR users.id = t4.user_id AND user.state = 1 AND user.friends > 1 AND user.loc = 'Turkey');
25.10.2013
  • но количество полей всегда разное в каждой таблице транзакций, поэтому я извлекаю разные поля из каждой отдельной таблицы транзакций. 25.10.2013

  • 3

    Проверьте, все ли поля с условиями ИНДЕКСИРОВАНЫ. (t.user_id, пользователи: состояние, друзья, местоположение) Также попробуйте использовать это:

    select blablabla from
    (
      select * from user where user.state = 1 AND user.friends > 1 AND user.loc = 'Turkey'
    ) U1
    join transactions1 t1 on (U1.Id=t1.User_id)
    
    UNION ALL
    
    select blablabla from
    (
      select * from user where user.state = 1 AND user.friends > 1 AND user.loc = 'Turkey'
    ) U1
    join transactions1 t2 on (U1.Id=t2.User_id)
    
    UNION ALL
    
    select blablabla from
    (
      select * from user where user.state = 1 AND user.friends > 1 AND user.loc = 'Turkey'
    ) U1
    join transactions1 t3 on (U1.Id=t3.User_id)
    
    UNION ALL
    
    select blablabla from
    (
      select * from user where user.state = 1 AND user.friends > 1 AND user.loc = 'Turkey'
    ) U1
    join transactions1 t4 on (U1.Id=t4.User_id)
    
    25.10.2013
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..