Mysql
 sql >> база данни >  >> RDS >> Mysql

По-ефективно ли е да се разделят големи и малки свързани данни в колоната на SQL таблица?

VARCHAR се съхранява в съответствие с таблицата. VARCHAR е по-бърз, когато размерът е разумен, чийто компромис ще бъде по-бърз, зависи от вашите данни и хардуер, бихте искали да сравните сценарий от реалния свят с вашите данни.

Ефективният максимален брой байтове, които могат да бъдат съхранени в VARCHAR или VARBINARY колоната е обект на максималния размер на реда от 65,535 bytes , което се споделя между всички колони.

Например VARCHAR(255) колоната може да съдържа низ с максимална дължина от 255 знака. Ако приемем, че колоната използва набора от символи latin1 (един байт на знак), действителното необходимо съхранение е дължината на низа (L), плюс един байт за запис на дължината на низа. За низа 'abcd' , L е 4 и изискването за съхранение е пет байта. Ако вместо това същата колона е декларирана да използва ucs2 двубайтов набор от знаци, изискването за съхранение е 10 байта:Дължината на 'abcd' е осем байта и колоната изисква два байта за съхраняване на дължини, тъй като максималната дължина е по-голяма от 255 (до 510 bytes ).

За по-големи данни помислете за използването на TEXT или BLOB . TEXT и BLOB колоните се реализират по различен начин в NDB устройство за съхранение, при което всеки ред в TEXT колоната се състои от две отделни части. Един от тях е с фиксиран размер (256 bytes) , и всъщност се съхранява в оригиналната таблица. Другият се състои от всякакви данни над 256 bytes , който се съхранява в скрита таблица. Редовете в тази втора таблица винаги са 2,000 bytes дълго. Това означава, че размерът на TEXT колоната е 256 ако size <= 256 (където размерът представлява размера на реда); в противен случай размерът е 256 + size + (2000 – (size – 256) % 2000) .

http://dev.mysql.com/doc/refman /5.6/bg/storage-requirements.html

Зависи от връзката ви с базата данни, ако рядко използвате тези полета в заявката. Например за допълнителна информация. Създаване на отделна таблица е добра опция (нормализиране).

БЕЛЕЖКИ: VARCHAR е различно с CHAR . Ако създадете VARCHAR(250) и вмъкнете само 20 символи върху него, то ще отнеме 5 bytes + L различно с CHAR(250) , ще отнеме 250 bytes + L за същото състояние.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ИЗБЕРЕТЕ различни стойности за множество редове с един и същ идентификатор

  2. Кога функцията MySQL ПОРЪЧВА ПО RAND()?

  3. java.lang.ClassNotFoundException:com.mysql.jdbc.Driver по време на изпълнение (eclipse / maven /tomcat)

  4. SQL стандартно извикване UPSERT

  5. Препоръчва ли се LIMIT 1 за заявка, където условието WHERE се основава на PK?