Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / ускорить работу связки запросов / 25 сообщений из 33, страница 1 из 2
18.02.2014, 19:48:29
    #38565122
MargaritaM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ускорить работу связки запросов
Здравствуйте.
Есть два таблицы, допустим
Студент
id
name

ну и , допустим, таблица какая-нибудь
Оценки
id
idStudent
mark

как связаны понятно)

на вход подается строка "имя студента, оценка", соответственно берем имя студента, вставляем в таблицу студент, если такого там нет, забираем idэтого студента , вставляем в Оценки...

вопрос: как бы так убыстрить эту всю канитель с таблицей Студент? наверняка же кто-то уже с такой проблемой сталкивался... а то сижу тут, изобретаю колесо...

изначально было у меня SELECT по имени (ну или хешу от имени) студента, если селект ничего не дал, то инсер и опять то же селект (ибо id вставленой записи надежно вместе с селектом кажется получить нельзя?).. как-то убожественно получается, поменяла на insert ignore и селект... но тоже как-то некрасиво, учитывая что зачастую студент уже есть в базе...

в общем может кто-нибудь подскажет идею как сократить время выполнения всего этого дела?
...
Рейтинг: 0 / 0
18.02.2014, 21:06:30
    #38565185
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ускорить работу связки запросов
MargaritaMибо id вставленой записи надежно вместе с селектом кажется получить нельзя?last_insert_id(), не?
...
Рейтинг: 0 / 0
18.02.2014, 21:24:18
    #38565200
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ускорить работу связки запросов
А зачем оптимизировать такую простую и в общем недолгую операцию?
Разве что почитать про INSERT ... ON DUPLICATE KEY UPDATE ...
...
Рейтинг: 0 / 0
19.02.2014, 11:06:10
    #38565641
MargaritaM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ускорить работу связки запросов
Akina,

читала) INSERT ... ON DUPLICATE KEY UPDATE выполняется медленнее, чем insert ignore...кажется...

авторА зачем оптимизировать такую простую и в общем недолгую операцию?
ну, может и не дорогую, но время то все равно забирает тем более что количество таких вот операций оооочень велико... думала, может можно как-то упростить, потому что неудобная и какая-то топорная схема получается(
...
Рейтинг: 0 / 0
19.02.2014, 11:12:08
    #38565655
MargaritaM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ускорить работу связки запросов
tanglir,

авторибо id вставленной записи надежно вместе с селектом кажется получить нельзя?
имела ввиду сразу вместе с инсертом) ну чтобы вставил а тебе назад поле первичного ключа возвращалось))

авторlast_insert_id()
а если у меня 100 параллельно таких роботов работает, которые делают такую связку запросов? где гарантия, что последний вставленный будет именно тем, что вставила конкретная программа...как-то побаиваюсь его пользовать... да и все равно тот же селект... есть, конечно, еще вариант: в качестве внешнего ключа использовать не поле id а какой-нибудь хеш от имени студента, тогда второй селект не надо делать... но опять же коллизии разные, и некрасиво как-то получается...
...
Рейтинг: 0 / 0
19.02.2014, 11:53:38
    #38565758
artas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ускорить работу связки запросов
MargaritaMtanglir,


а если у меня 100 параллельно таких роботов работает, которые делают такую связку запросов? где гарантия, что последний вставленный будет именно тем, что вставила конкретная программа...
Собственно СУБД как раз и созданны для таких гарантий
...
Рейтинг: 0 / 0
19.02.2014, 11:56:10
    #38565767
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ускорить работу связки запросов
MargaritaMа если у меня 100 параллельно таких роботов работает, которые делают такую связку запросов? где гарантия, что последний вставленный будет именно тем, что вставила конкретная программав документации, которую кто-то ниасилевает прочитать
...
Рейтинг: 0 / 0
19.02.2014, 11:57:00
    #38565771
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ускорить работу связки запросов
MargaritaMимела ввиду сразу вместе с инсертом) ну чтобы вставил а тебе назад поле первичного ключа возвращалось))ну returning в мускле нету, что да, то да
...
Рейтинг: 0 / 0
19.02.2014, 12:49:17
    #38565904
MargaritaM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ускорить работу связки запросов
авторв документации, которую кто-то ниасилевает прочитать
каюсь)) думала что возвращает последнее вообще а не в текущей сессии)


т.е. я так понимаю, от связки селект-инсерт-селект все равно не уйти?
...
Рейтинг: 0 / 0
19.02.2014, 12:57:41
    #38565927
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ускорить работу связки запросов
MargaritaM,

более того :)
подумайте над ситуацией, когда вы делаете селект, и студента в базе нет
а когда делаете инсерт, он там уже появился, занесённый другим человеком :)
...
Рейтинг: 0 / 0
19.02.2014, 13:22:23
    #38565984
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ускорить работу связки запросов
MargaritaMколичество таких вот операций оооочень велико...
По одному соединению или по разным?
В первом случае разумнее положить исходные данные в темп-таблицу, а потом одним-двумя запросами выполнить требуемое.
...
Рейтинг: 0 / 0
19.02.2014, 16:21:51
    #38566434
MargaritaM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ускорить работу связки запросов
Akina,

авторПо одному соединению или по разным?
В первом случае разумнее положить исходные данные в темп-таблицу

вот тут я не очень поняла... ну,допустим по одному, но что нам дадут временные таблицы, можете пояснить? во-первых временные таблицы обрабатываются не быстрее чем обычные, а во вторых...просто не могу понять каким боком их сюда целесообразно приложить...)
...
Рейтинг: 0 / 0
19.02.2014, 16:24:03
    #38566438
MargaritaM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ускорить работу связки запросов
tanglir,

авторподумайте над ситуацией, когда вы делаете селект, и студента в базе нет
а когда делаете инсерт, он там уже появился, занесённый другим человеком :)

ну, схема с insrt ignore-select тут вполне подходит, мне кажется... вот, только last_insert_id() тут уже не воспользуешься, на сколько я понимаю... я правильно хотя бы понимаю?))
...
Рейтинг: 0 / 0
19.02.2014, 16:38:08
    #38566469
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ускорить работу связки запросов
MargaritaMвот тут я не очень поняла...Вы правда думаете, что при выполнении пачки последовательно передаваемых запросов лимитирующее звено - это производительность MySQL-сервера?
...
Рейтинг: 0 / 0
19.02.2014, 16:38:10
    #38566470
MargaritaM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ускорить работу связки запросов
А на сколько целесообразно завести например хранимую процедуру, которая получает на вход имя студента, а на выходе отдает его id? Понимаю, что то же самое, что и было, только в профиль) но:
+ уменьшения объема кода
- не будет ли процедура медленнее чем обычные селект-инсер-селект?...
ну и опять же на сколько это целесообразно?)
...
Рейтинг: 0 / 0
19.02.2014, 16:59:51
    #38566516
MargaritaM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ускорить работу связки запросов
Akina,

авторВы правда думаете, что при выполнении пачки последовательно передаваемых запросов лимитирующее звено - это производительность MySQL-сервера?

не буду скрывать, я не совсем спец в mysql, я бы даже сказала совсем не спец) поэтому сюда и обратилась))

ну, переставите, что у вас есть текстовик со списком всех студентов страны с их оценками по разным предметам... соответственно, текстовик распарсить и в базу затолкать последовательно все это дело...это подходит под "пачки последовательно передаваемых запросов"? ну и опять же это пример с таблицами студент и оценки очень утрированы по отношению к тому что происходит у меня, просто надо было как-то проще объяснить что я имею ввиду, ситуация-то распространенная как мне кажется)

в моем случаем скорость выполнения является одним из ключевых условий... правильно построенный запрос, правильно построенная бд, что еще может мне помочь ускориться?) ну, не знаю, по поводу правильных запросов у вас вот спросила, по поводу конструкции бд... а какие еще варианты есть, разбиение на 2 таблицы и связь их по id по любому лучше, чем хранить поле текстовое в таблице Оценки.
...
Рейтинг: 0 / 0
19.02.2014, 17:47:32
    #38566595
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ускорить работу связки запросов
MargaritaMу вас есть текстовик со списком всех студентов страны с их оценками по разным предметам... соответственно, текстовик распарсить и в базу затолкать последовательно все это дело...это подходит под "пачки последовательно передаваемых запросов"?
Да, вполне. Так вот, я бы поступил так.
Сначала выполнил бы на клиенте препроцессинг файла - очистил его от мусора, провёл препроцессинг и превратил в рафинированный CSV-файл. Затем по FTP загрузил его на сервер. Потом запустил хранимую процедуру. Внутри неё - загрузил данные во временную таблицу, используя LOAD DATA INFILE, после чего одним или несколькими (по контенту и ситуации) запросами разложил загруженные данные в боевые таблицы (при необходимости обернув процесс в транзакцию).

И уж во всяком случае не гонял бы туда-сюда вопросы-ответы. Очевидно, что при таком подходе узким местом будет не сервер, а канал передачи данных и сетевая подсистема.
...
Рейтинг: 0 / 0
19.02.2014, 17:49:59
    #38566598
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ускорить работу связки запросов
MargaritaMчто еще может мне помочь ускориться?Микробов смотреть микроскопом, орехи колоть щелкунчиком...
для каждого этапа следует использовать специально предназначенный для этого инструмент. Колоть орехи молотком, привязанным к поршню гидравлического пресса - тоже в общем неправильно, руками и быстрее, и проще.
...
Рейтинг: 0 / 0
19.02.2014, 18:10:02
    #38566632
MargaritaM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ускорить работу связки запросов
Akina,

я занимаюсь парсингом сайта. допусти какой-нибудь сайт с данными по всем футбольным матчам за последние лет 100. Мне надо это все дело в мою базу перекачать... да, вариант с CSV хорош , но тут задача более обширная чем просто тупо в две таблички загнать... таких таблиц как "студент" у меня больше 5 будет (судьи, игроки и т.д.,поэтому и хочу что-нибудь с этим сделать, а то надоело уже)... соответственно, заходим в каждый турнир, забираем данные по нему, заносим в бд, открываем страницы для каждого матча и т.д.... ладно если был бы готовый текстовик, тут же дело обстоит немного по-другому...заносить эту всю иформацию сначала в CSV а оттуда в базу?... какой-то... вообще не вариант, как мне кажется)
ну и мне критически важны сроки, в которые вся работа будет сделана
...
Рейтинг: 0 / 0
19.02.2014, 18:18:14
    #38566640
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ускорить работу связки запросов
MargaritaMдопусти какой-нибудь сайт с данными по всем футбольным матчам за последние лет 100. Мне надо это все дело в мою базу перекачать...Хорошо, допустим.
Идём по описанному мной варианту. Данные ведь о всех матчах там в однотипной форме... т.е. создаём всю цепочку (препроцессор, переносчик, загрузчик) для одного матча - имеем инструмент для загрузки данных о любом другом (о всех) матче.
Потом берём второй сайт. Там данные в другой форме. Переделываем препроцессор под новую структуру данных... а всё остальное можно не трогать, оно и так работает. Т.е. создаём препроцессор для одного матча - имеем инструмент для загрузки данных о любом другом (о всех) матче.
Так понятно?
...
Рейтинг: 0 / 0
20.02.2014, 08:39:35
    #38567006
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ускорить работу связки запросов
MargaritaM,

не занимайтесь ерундой и воровством. Запросите csv формат и его вам вышлют. Далее, как сказал Akina.
...
Рейтинг: 0 / 0
20.02.2014, 08:41:34
    #38567007
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ускорить работу связки запросов
Arhat109,

Я сам много занимаюсь парсингом сайтов. Но только в ситуации: "дайте нам Ваш прайс. - ой, его руками вколачивают прямо на сайт, можете сами взять? Конечно могу, но будет лучше, если пришлете вот это, сделав вот так."
...
Рейтинг: 0 / 0
20.02.2014, 10:20:35
    #38567124
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ускорить работу связки запросов
MargaritaM,

В чем некрасивость?
...
Рейтинг: 0 / 0
20.02.2014, 10:49:02
    #38567163
MargaritaM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ускорить работу связки запросов
Arhat109,

авторЗапросите csv формат и его вам вышлют

и его дадут??? офигеть...просто, даже такая мысль в голову не приходила... пришла на работу, сказали вот сайт, вот открываешь код, парсишь, собираешь в бд...
ну просто капец, и я все это время страдала ерундой?!...

стесняюсь спросить, а как запросить этот csv, просто написать в поддержку: уважаемая редакция, пришлите мне данные?
...
Рейтинг: 0 / 0
20.02.2014, 10:52:38
    #38567170
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ускорить работу связки запросов
MargaritaMи его дадут?Arhat109MargaritaM,

не занимайтесь ерундой и воровством. Запросите csv формат и его вам вышлют. Далее, как сказал Akina.Это, конечно, если вы в принципе можете претендовать на получение этой информации, т.е. не занимаетесь воровством.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / ускорить работу связки запросов / 25 сообщений из 33, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]