|
|
|
ускорить работу связки запросов
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Есть два таблицы, допустим Студент id name ну и , допустим, таблица какая-нибудь Оценки id idStudent mark как связаны понятно) на вход подается строка "имя студента, оценка", соответственно берем имя студента, вставляем в таблицу студент, если такого там нет, забираем idэтого студента , вставляем в Оценки... вопрос: как бы так убыстрить эту всю канитель с таблицей Студент? наверняка же кто-то уже с такой проблемой сталкивался... а то сижу тут, изобретаю колесо... изначально было у меня SELECT по имени (ну или хешу от имени) студента, если селект ничего не дал, то инсер и опять то же селект (ибо id вставленой записи надежно вместе с селектом кажется получить нельзя?).. как-то убожественно получается, поменяла на insert ignore и селект... но тоже как-то некрасиво, учитывая что зачастую студент уже есть в базе... в общем может кто-нибудь подскажет идею как сократить время выполнения всего этого дела? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 19:48:29 |
|
||
|
ускорить работу связки запросов
|
|||
|---|---|---|---|
|
#18+
MargaritaMибо id вставленой записи надежно вместе с селектом кажется получить нельзя?last_insert_id(), не? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 21:06:30 |
|
||
|
ускорить работу связки запросов
|
|||
|---|---|---|---|
|
#18+
А зачем оптимизировать такую простую и в общем недолгую операцию? Разве что почитать про INSERT ... ON DUPLICATE KEY UPDATE ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 21:24:18 |
|
||
|
ускорить работу связки запросов
|
|||
|---|---|---|---|
|
#18+
Akina, читала) INSERT ... ON DUPLICATE KEY UPDATE выполняется медленнее, чем insert ignore...кажется... авторА зачем оптимизировать такую простую и в общем недолгую операцию? ну, может и не дорогую, но время то все равно забирает тем более что количество таких вот операций оооочень велико... думала, может можно как-то упростить, потому что неудобная и какая-то топорная схема получается( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 11:06:10 |
|
||
|
ускорить работу связки запросов
|
|||
|---|---|---|---|
|
#18+
tanglir, авторибо id вставленной записи надежно вместе с селектом кажется получить нельзя? имела ввиду сразу вместе с инсертом) ну чтобы вставил а тебе назад поле первичного ключа возвращалось)) авторlast_insert_id() а если у меня 100 параллельно таких роботов работает, которые делают такую связку запросов? где гарантия, что последний вставленный будет именно тем, что вставила конкретная программа...как-то побаиваюсь его пользовать... да и все равно тот же селект... есть, конечно, еще вариант: в качестве внешнего ключа использовать не поле id а какой-нибудь хеш от имени студента, тогда второй селект не надо делать... но опять же коллизии разные, и некрасиво как-то получается... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 11:12:08 |
|
||
|
ускорить работу связки запросов
|
|||
|---|---|---|---|
|
#18+
MargaritaMtanglir, а если у меня 100 параллельно таких роботов работает, которые делают такую связку запросов? где гарантия, что последний вставленный будет именно тем, что вставила конкретная программа... Собственно СУБД как раз и созданны для таких гарантий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 11:53:38 |
|
||
|
ускорить работу связки запросов
|
|||
|---|---|---|---|
|
#18+
MargaritaMа если у меня 100 параллельно таких роботов работает, которые делают такую связку запросов? где гарантия, что последний вставленный будет именно тем, что вставила конкретная программав документации, которую кто-то ниасилевает прочитать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 11:56:10 |
|
||
|
ускорить работу связки запросов
|
|||
|---|---|---|---|
|
#18+
MargaritaMимела ввиду сразу вместе с инсертом) ну чтобы вставил а тебе назад поле первичного ключа возвращалось))ну returning в мускле нету, что да, то да ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 11:57:00 |
|
||
|
ускорить работу связки запросов
|
|||
|---|---|---|---|
|
#18+
авторв документации, которую кто-то ниасилевает прочитать каюсь)) думала что возвращает последнее вообще а не в текущей сессии) т.е. я так понимаю, от связки селект-инсерт-селект все равно не уйти? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 12:49:17 |
|
||
|
ускорить работу связки запросов
|
|||
|---|---|---|---|
|
#18+
MargaritaM, более того :) подумайте над ситуацией, когда вы делаете селект, и студента в базе нет а когда делаете инсерт, он там уже появился, занесённый другим человеком :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 12:57:41 |
|
||
|
ускорить работу связки запросов
|
|||
|---|---|---|---|
|
#18+
MargaritaMколичество таких вот операций оооочень велико... По одному соединению или по разным? В первом случае разумнее положить исходные данные в темп-таблицу, а потом одним-двумя запросами выполнить требуемое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 13:22:23 |
|
||
|
ускорить работу связки запросов
|
|||
|---|---|---|---|
|
#18+
Akina, авторПо одному соединению или по разным? В первом случае разумнее положить исходные данные в темп-таблицу вот тут я не очень поняла... ну,допустим по одному, но что нам дадут временные таблицы, можете пояснить? во-первых временные таблицы обрабатываются не быстрее чем обычные, а во вторых...просто не могу понять каким боком их сюда целесообразно приложить...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 16:21:51 |
|
||
|
ускорить работу связки запросов
|
|||
|---|---|---|---|
|
#18+
tanglir, авторподумайте над ситуацией, когда вы делаете селект, и студента в базе нет а когда делаете инсерт, он там уже появился, занесённый другим человеком :) ну, схема с insrt ignore-select тут вполне подходит, мне кажется... вот, только last_insert_id() тут уже не воспользуешься, на сколько я понимаю... я правильно хотя бы понимаю?)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 16:24:03 |
|
||
|
ускорить работу связки запросов
|
|||
|---|---|---|---|
|
#18+
MargaritaMвот тут я не очень поняла...Вы правда думаете, что при выполнении пачки последовательно передаваемых запросов лимитирующее звено - это производительность MySQL-сервера? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 16:38:08 |
|
||
|
ускорить работу связки запросов
|
|||
|---|---|---|---|
|
#18+
А на сколько целесообразно завести например хранимую процедуру, которая получает на вход имя студента, а на выходе отдает его id? Понимаю, что то же самое, что и было, только в профиль) но: + уменьшения объема кода - не будет ли процедура медленнее чем обычные селект-инсер-селект?... ну и опять же на сколько это целесообразно?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 16:38:10 |
|
||
|
ускорить работу связки запросов
|
|||
|---|---|---|---|
|
#18+
Akina, авторВы правда думаете, что при выполнении пачки последовательно передаваемых запросов лимитирующее звено - это производительность MySQL-сервера? не буду скрывать, я не совсем спец в mysql, я бы даже сказала совсем не спец) поэтому сюда и обратилась)) ну, переставите, что у вас есть текстовик со списком всех студентов страны с их оценками по разным предметам... соответственно, текстовик распарсить и в базу затолкать последовательно все это дело...это подходит под "пачки последовательно передаваемых запросов"? ну и опять же это пример с таблицами студент и оценки очень утрированы по отношению к тому что происходит у меня, просто надо было как-то проще объяснить что я имею ввиду, ситуация-то распространенная как мне кажется) в моем случаем скорость выполнения является одним из ключевых условий... правильно построенный запрос, правильно построенная бд, что еще может мне помочь ускориться?) ну, не знаю, по поводу правильных запросов у вас вот спросила, по поводу конструкции бд... а какие еще варианты есть, разбиение на 2 таблицы и связь их по id по любому лучше, чем хранить поле текстовое в таблице Оценки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 16:59:51 |
|
||
|
ускорить работу связки запросов
|
|||
|---|---|---|---|
|
#18+
MargaritaMу вас есть текстовик со списком всех студентов страны с их оценками по разным предметам... соответственно, текстовик распарсить и в базу затолкать последовательно все это дело...это подходит под "пачки последовательно передаваемых запросов"? Да, вполне. Так вот, я бы поступил так. Сначала выполнил бы на клиенте препроцессинг файла - очистил его от мусора, провёл препроцессинг и превратил в рафинированный CSV-файл. Затем по FTP загрузил его на сервер. Потом запустил хранимую процедуру. Внутри неё - загрузил данные во временную таблицу, используя LOAD DATA INFILE, после чего одним или несколькими (по контенту и ситуации) запросами разложил загруженные данные в боевые таблицы (при необходимости обернув процесс в транзакцию). И уж во всяком случае не гонял бы туда-сюда вопросы-ответы. Очевидно, что при таком подходе узким местом будет не сервер, а канал передачи данных и сетевая подсистема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 17:47:32 |
|
||
|
ускорить работу связки запросов
|
|||
|---|---|---|---|
|
#18+
MargaritaMчто еще может мне помочь ускориться?Микробов смотреть микроскопом, орехи колоть щелкунчиком... для каждого этапа следует использовать специально предназначенный для этого инструмент. Колоть орехи молотком, привязанным к поршню гидравлического пресса - тоже в общем неправильно, руками и быстрее, и проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 17:49:59 |
|
||
|
ускорить работу связки запросов
|
|||
|---|---|---|---|
|
#18+
Akina, я занимаюсь парсингом сайта. допусти какой-нибудь сайт с данными по всем футбольным матчам за последние лет 100. Мне надо это все дело в мою базу перекачать... да, вариант с CSV хорош , но тут задача более обширная чем просто тупо в две таблички загнать... таких таблиц как "студент" у меня больше 5 будет (судьи, игроки и т.д.,поэтому и хочу что-нибудь с этим сделать, а то надоело уже)... соответственно, заходим в каждый турнир, забираем данные по нему, заносим в бд, открываем страницы для каждого матча и т.д.... ладно если был бы готовый текстовик, тут же дело обстоит немного по-другому...заносить эту всю иформацию сначала в CSV а оттуда в базу?... какой-то... вообще не вариант, как мне кажется) ну и мне критически важны сроки, в которые вся работа будет сделана ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 18:10:02 |
|
||
|
ускорить работу связки запросов
|
|||
|---|---|---|---|
|
#18+
MargaritaMдопусти какой-нибудь сайт с данными по всем футбольным матчам за последние лет 100. Мне надо это все дело в мою базу перекачать...Хорошо, допустим. Идём по описанному мной варианту. Данные ведь о всех матчах там в однотипной форме... т.е. создаём всю цепочку (препроцессор, переносчик, загрузчик) для одного матча - имеем инструмент для загрузки данных о любом другом (о всех) матче. Потом берём второй сайт. Там данные в другой форме. Переделываем препроцессор под новую структуру данных... а всё остальное можно не трогать, оно и так работает. Т.е. создаём препроцессор для одного матча - имеем инструмент для загрузки данных о любом другом (о всех) матче. Так понятно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 18:18:14 |
|
||
|
ускорить работу связки запросов
|
|||
|---|---|---|---|
|
#18+
MargaritaM, не занимайтесь ерундой и воровством. Запросите csv формат и его вам вышлют. Далее, как сказал Akina. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2014, 08:39:35 |
|
||
|
ускорить работу связки запросов
|
|||
|---|---|---|---|
|
#18+
Arhat109, Я сам много занимаюсь парсингом сайтов. Но только в ситуации: "дайте нам Ваш прайс. - ой, его руками вколачивают прямо на сайт, можете сами взять? Конечно могу, но будет лучше, если пришлете вот это, сделав вот так." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2014, 08:41:34 |
|
||
|
ускорить работу связки запросов
|
|||
|---|---|---|---|
|
#18+
MargaritaM, В чем некрасивость? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2014, 10:20:35 |
|
||
|
ускорить работу связки запросов
|
|||
|---|---|---|---|
|
#18+
Arhat109, авторЗапросите csv формат и его вам вышлют и его дадут??? офигеть...просто, даже такая мысль в голову не приходила... пришла на работу, сказали вот сайт, вот открываешь код, парсишь, собираешь в бд... ну просто капец, и я все это время страдала ерундой?!... стесняюсь спросить, а как запросить этот csv, просто написать в поддержку: уважаемая редакция, пришлите мне данные? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2014, 10:49:02 |
|
||
|
ускорить работу связки запросов
|
|||
|---|---|---|---|
|
#18+
MargaritaMи его дадут?Arhat109MargaritaM, не занимайтесь ерундой и воровством. Запросите csv формат и его вам вышлют. Далее, как сказал Akina.Это, конечно, если вы в принципе можете претендовать на получение этой информации, т.е. не занимаетесь воровством. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2014, 10:52:38 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38567007&tid=1835189]: |
0ms |
get settings: |
5ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
133ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 413ms |

| 0 / 0 |
