BG Development


  Reply to this topicStart new topicStart Poll

> Оптимизиране на MYSQL при използване на FOREIGN KE
klambrev
Публикувано на: 06-04-2018, 13:18
Quote Post



Име: Коко
Група: Потребител
Ранг: Новопостъпил

Мнения: 34
Регистриран на: 10.06.06



Здравейте,
искам да оптимизирам една MYSQL заявка.
Имам следните таблици:
"потребители" - в която всеки има уникален й-мейл адрес.
"сензори" - всеки сензор е с уникалено ид и е свързан към определен потребител
"стойност" - това е измерената стойност от сензора и е свързана към уникалния ид на сензорите


сензорите изпращат периодично следното
user1/ac8f/22

потребителите ги създавам ръчно предварително и с тях нямам проблем.
искам да избегна ръчното създаването на сензорите

INSERT INTO sensors (sensor_id, user_id) VALUES ('ac8f', (SELECT id FROM users WHERE user ='user1'));
INSERT INTO value (reading_value1, sensor_id) VALUES ('22', (SELECT id FROM sensors WHERE sensor_id ='22'));

В момента това работи, полето sensor_id е уникално и реално при всяка заявка дава грешка за дублиране и изпълнява само втората заявка за value.

Ако използвам IF ще имам въпрос към базата дали sensor_id вече съществува и мисля, че времето за реакция пак ще е същото.

Има ли вариант да оптимизирам нещата ?
PMEmail PosterUsers Website
Top
thrawn
Публикувано на: 06-04-2018, 15:59
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1725
Регистриран на: 17.01.17



Ами обработи си грешката. Нормално е да я получиш при положение, че логиката ти включва дублиране на уникална стойност. За мен обработването на грешката е най-удачното решение.

Ако нещо те притеснява в това, то имаш още два варианта. Или използваш insert ... on duplicate key update. Или направо ползваш replace.
PMEmail Poster
Top
rvc
Публикувано на: 08-04-2018, 22:34
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2532
Регистриран на: 13.05.11



логиката ти куца...
вместо да вкарваш данните за сензора и неговата стойност в две таблици по-добре си направи таблица в която има следните полета:
- user_id
- sensor_id
- value
PMEmail PosterUsers Website
Top
klambrev
Публикувано на: 11-04-2018, 11:14
Quote Post



Име: Коко
Група: Потребител
Ранг: Новопостъпил

Мнения: 34
Регистриран на: 10.06.06



благодаря за коментарите.
направил съм логиката в отделни таблици защото реално от сензорите имам 10тина стойности. за по-просто съм показал само с 1 стойност.

ако направя една таблица с полетата
- user_id
- sensor_id
- value1..10

user_id и sensor_id ще ми се повтарят на всеки ред. нали все пак това е идеята да се ползва FOREIGN KEY.
Също така при извеждане на информацията за даден сензор не е ли много по-просто и бързо когато е в отделна таблица. Ако всичко е в една таблица ще трябва да се търси между хиляди редове за съвпадение на user_id и sensor_id

отказах се от REPLACE защото , ако реда съществува. реално ще се изпълнят две операции - изтриване и ново създаване

Май най-правилното би било INSERT IGNORE?
PMEmail PosterUsers Website
Top
Gamma Goblin
Публикувано на: 11-04-2018, 11:22
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1139
Регистриран на: 21.02.18



QUOTE
Май най-правилното би било INSERT IGNORE?


най-правилното е изобщо да не вкарваш сензора всеки път а в табилицата values да имаш foreign key към sensors.

Като се опиташ да вкараш във values и фейлне защото няма такъв foreign key за тоя сензор, просто обработваш изключението и в exception handler-a вкарваш сензора. Тоя подход ще работи перфектно при много операции за запис на данни и сравнително редки добавяния на нови сензори, което е common case-a

QUOTE
user_id и sensor_id ще ми се повтарят на всеки ред. нали все пак това е идеята да се ползва FOREIGN KEY.


Щок! Ужас! Foreign key-a се повтаря на всеки ред със запис относно тоя ключ

Това мнение е било редактирано от Gamma Goblin на 11-04-2018, 11:24


--------------------
Напред! Живота е сраженье! Напред! И прав всегда ходи!
Напред, макар към поражение! Ако ще паднеш, прав падни!
---
Raw, and untamed in spirit, We chew this world and Spit it out
---
Challenge my own world to chaos
---
Im not intimidated by the good looking ones, it's the ugly ones that scare the shit out of me
PMEmail PosterUsers Website
Top
klambrev
Публикувано на: 12-04-2018, 20:40
Quote Post



Име: Коко
Група: Потребител
Ранг: Новопостъпил

Мнения: 34
Регистриран на: 10.06.06



QUOTE (Gamma Goblin @ 11-04-2018, 11:22)
Като се опиташ да вкараш във values и фейлне защото няма такъв foreign key за тоя сензор, просто обработваш изключението и в exception handler-a вкарваш сензора. Тоя подход ще работи перфектно при много операции за запис на данни и сравнително редки добавяния на нови сензори, което е common case-a

Благодаря, мисля че точно това търсех!
До сега не съм го ползвал но прегледах документацията.
Утре ще опитам да го разиграя.
PMEmail PosterUsers Website
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2018 | BG Development | All Rights Reserved
RSS 2.0