Раді Вас бачити! » Увійти » Створити новий профіль

ФЗВ: Вопріс по SQL

ФЗВ: Вопріс по SQL

Точніше по MySql.
Є табличка на кілька десятків а то і сотень тисяч записів, частим пошуком і зрідка добавками нових елементів.
В записі є рідковживані поля VARCHAR, вони заповнені лише у невеликого відсотка записів, в інших - порожні. Тобто файл фактично забитий порожніми полями.
Чи сильно вповільниться пошук, якщо поміняти тип цих полів на щось типу TEXT, BLOB чи TINYBLOB ?
   
Re: ФЗВ: Вопріс по SQL

ефективніше зробити ще одну таблицю, один до одного, для цього рідковживаного поля

   
Re: ФЗВ: Вопріс по SQL

Щось недобре ви задумали імхо
   
Re: ФЗВ: Вопріс по SQL

Щось недобре ви задумали імхо

та да, в блуби впихувати рідковживаний текст, це жерсть
   
Re: ФЗВ: Вопріс по SQL
h2o

innodb?
https://dev.mysql.com/doc/refman/5.7/en/innodb-physical-record.html
An SQL NULL value reserves one or two bytes in the record directory. Besides that, an SQL NULL value reserves zero bytes in the data part of the record if stored in a variable length column.
   
Re: ФЗВ: Вопріс по SQL

ефективніше зробити ще одну таблицю, один до одного, для цього рідковживаного поля

+1. Так можна додавати і додавати поля...
   
Re: ФЗВ: Вопріс по SQL

Точніше по MySql.
Є табличка на кілька десятків а то і сотень тисяч записів, частим пошуком і зрідка добавками нових елементів.
В записі є рідковживані поля VARCHAR, вони заповнені лише у невеликого відсотка записів, в інших - порожні. Тобто файл фактично забитий порожніми полями.
Чи сильно вповільниться пошук, якщо поміняти тип цих полів на щось типу TEXT, BLOB чи TINYBLOB ?
скорость поиска зависит от правильной индексации базы, а не от наличия или отсутствия в ней VARCHAR, TEXT и прочего. Надеюсь тока что у вас этот VARCHAR (особо если там разной длинны строки) не первичным индексом идет. Хотя я не большой знаток по базам.
   
Re: ФЗВ: Вопріс по SQL

А насчет VARCHAR vs TEXT vs BLOB, вот тут например посмотрите https://stackoverflow.com/questions/2023481/mysql-large-varchar-vs-text

---
TEXT and BLOB is stored off the table with the table just having a pointer to the location of the actual storage.

VARCHAR is stored inline with the table. VARCHAR is faster when the size is reasonable, the tradeoff of which would be faster depends upon your data and your hardware
---
   
Re: ФЗВ: Вопріс по SQL

ефективніше зробити ще одну таблицю, один до одного, для цього рідковживаного поля

я б теж так зробив...
окрему табличку з рідковживаними полями...
але не один до одного а повязувати з першою...
   
Re: ФЗВ: Вопріс по SQL

1) для чого змінювати ? розмір бази, швидкість роботи, зручність отримання даних, тощо...

2) подивіться у базі даних значення порожніх полів. якщо вони NULL, тоді воно не займає ніякого місця. якщо там пусте текстове поле " " - тоді я б поставив триггер, що спрацьовує при додаванні та редагуванні, щось типу:
Код: [Select]
if New.FieldValue = ''
  then New.FieldValue=Null

3) для коректності змін в структурі бази даних треба знати як ця база даних працює, які додатки її використовують. Якщо зміни у структурі не вплинуть на роботу інших, то такі рідковживані дані можна винести в окрему таблицю:

Код: [Select]

MainData (MainID, Field1, Field2)

SubData (SubID, MainID, SubField1)


тоді, при необхідності отримання даних, запит зміниться на

Код: [Select]
select MD.MainID, MD.Field1, MD.Field2, SD.SubField1
from MainData MD
    left outer join SubData SD
    on MD.MainID=SD.MainID

   
Re: ФЗВ: Вопріс по SQL

забей, не влияет ни на что.
   
Re: ФЗВ: Вопріс по SQL
fam

ефективніше зробити ще одну таблицю, один до одного, для цього рідковживаного поля

+1
   
Re: ФЗВ: Вопріс по SQL

забей, не влияет ни на что.

Дякую за коротку відповідь  (tu)

По темі:
Готую список педроботів на ФУПі.
В полі "характеристика" буде вписано "характер м'який" або "характер близький до м'якого" але для більшості це поле буде не заповнене.

жарт, звичайно

Останнє редагування: 30 вересня 2017 17:18:27 від hornet
   
Re: ФЗВ: Вопріс по SQL

я б теж так зробив...
окрему табличку з рідковживаними полями...
але не один до одного а повязувати з першою...
разница то какая, если блоб/текст и так только указателем в таблице хранится.

Останнє редагування: 30 вересня 2017 17:27:29 від Alexey Checkin3
   
Re: ФЗВ: Вопріс по SQL
fam

пользуясь случаем -другой вопрос.

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

id                    f1                   f2           

1                    topic            _topic_sf

2                    topic             _topic_qw

3                    topic            _topic_sf_qwerty

4                    topic           topic

Надо, чтобы в результате остались записи 1 и 4
   
Re: ФЗВ: Вопріс по SQL
fam

Написать рег. выр в скрипте Perl или PHP- без проблем, а вот в запросе не получается.
   
Re: ФЗВ: Вопріс по SQL

Дякую за коротку відповідь  (tu)

По темі:
Готую список педроботів на ФУПі.
В полі "характеристика" буде вписано "характер м'який" або "характер близький до м'якого" але для більшості це поле буде не заповнене.

жарт, звичайно

Іобнутий народець. Навіть в специфічній вузькопрофільній айтішній гілці про SQL умудряються впихнути якийсь політсрач.


 :facepalm1:
   
Re: ФЗВ: Вопріс по SQL

ефективніше зробити ще одну таблицю, один до одного, для цього рідковживаного поля

Взагалі-то навіть і один до одного то буде зайве, краще багато до одного, оскільки більшість записів основної таблиці буде посилатись на пустий запис.
Навіщо зайві ресурси витрачати.
   
Re: ФЗВ: Вопріс по SQL

пользуясь случаем -другой вопрос.

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

id                    f1                   f2           

1                    topic            _topic_sf

2                    topic             _topic_qw

3                    topic            _topic_sf_qwerty

4                    topic           topic

Надо, чтобы в результате остались записи 1 и 4

процедура з курсором (Stored procedure)

для Firebird-у буде щось таке:

Код: [Select]
for
  select T1.F1
  from Tab1 T1
    into TempVar1
 
  do
    begin
      select T2.*
      from Tab1 T2 
      where T1.F2=TempVar1;

      suspend;
    end
   
Re: ФЗВ: Вопріс по SQL
fam

процедура з курсором (Stored procedure)

для Firebird-у буде щось таке:

Код: [Select]
for
  select T1.F1
  from Tab1 T1
    into TempVar1
 
  do
    begin
      select T2.*
      from Tab1 T2 
      where T1.F2=TempVar1;

      suspend;
    end

я ваяю в Codeigniter, где используется  ActiveRecord, но возможности последнего не такие гибкие, и я просто хотел бы изобразить чистый запрос, без всяких шаблонов и оболочек. Шо такое это фберд - вообще без понятия
   
Re: ФЗВ: Вопріс по SQL

А чому перший запис має залишитися?
   
Re: ФЗВ: Вопріс по SQL

Дякую за коротку відповідь  (tu)

По темі:
Готую список педроботів на ФУПі.
В полі "характеристика" буде вписано "характер м'який" або "характер близький до м'якого" але для більшості це поле буде не заповнене.

жарт, звичайно

 (tu)
а нельзя по дефолту вместо NULL в это поле проставлять - "злая собака"?
   
Re: ФЗВ: Вопріс по SQL
fam

А чому перший запис має залишитися?

шаблон этого выражения в PHP, например, выглядел бы так:

'|^\_*'.$f_1.'\_*s*f*$|'
   
Re: ФЗВ: Вопріс по SQL

шаблон этого выражения в PHP, например, выглядел бы так:

'|^\_*'.$f_1.'\_*s*f*$|'

Взагалі поля одної таблиці в одному запиті можна порівнювати через INNER JOIN.
   
Re: ФЗВ: Вопріс по SQL

я ваяю в Codeigniter, где используется  ActiveRecord, но возможности последнего не такие гибкие, и я просто хотел бы изобразить чистый запрос, без всяких шаблонов и оболочек. Шо такое это фберд - вообще без понятия

гадаю, база даних MySQL ?

гляньте це : https://habrahabr.ru/post/46333/
   
Re: ФЗВ: Вопріс по SQL

процедура з курсором (Stored procedure)

для Firebird-у буде щось таке:

Код: [Select]
for
  select T1.F1
  from Tab1 T1
    into TempVar1
 
  do
    begin
      select T2.*
      from Tab1 T2 
      where T1.F2=TempVar1;

      suspend;
    end
А що в mysql оператора LIKE нема?
Select * from tab1 where f2 like f1+'%'
Тільки не зрозуміло чому 1 рядок має входити, а 2 і 3 ні.

Останнє редагування: 30 вересня 2017 18:49:20 від Sparx
   
Re: ФЗВ: Вопріс по SQL
fam

гадаю, база даних MySQL ?

гляньте це : https://habrahabr.ru/post/46333/

гляну, спасибо
   
Re: ФЗВ: Вопріс по SQL

Точніше по MySql.
Є табличка на кілька десятків а то і сотень тисяч записів, частим пошуком і зрідка добавками нових елементів.
В записі є рідковживані поля VARCHAR, вони заповнені лише у невеликого відсотка записів, в інших - порожні. Тобто файл фактично забитий порожніми полями.
Чи сильно вповільниться пошук, якщо поміняти тип цих полів на щось типу TEXT, BLOB чи TINYBLOB ?
Не тре нічого міняти..
1. Блоби зберігаються окремо від базової таблички, якщо рохмір даних великий. Блоби призначені для зберігання великих файлів.. Фактично при копіюванні великої таблички де є великі блоби - ви будете копіювати мільойни обєктів.. Блоби важко менеджети,  бекапити і т.д.. Фактично блоб це є ФК на іншу табличку і дуже знижує перформенс
2.  Якщо фільтри пошуку задаються часто по цих полях - тоді можуть тільки погіршити.. Якщо не використовуються - покуй..у вашому випадку табличка дуже маленька.. Не варто напрягатись.. На крайній випадок можна зробити фанкшенел бесіс індекс.. Якщо пошук проводиться по критеріям тих полів
.
   

Цю тему переглядають:

0 Користувачів і 1 гість
 
Повна версія