Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 9362|Ответ: 0

[Источник] Железное правило базы данных MySQL

[Скопировать ссылку]
Опубликовано 10.10.2019 14:00:44 | | |
Хорошая спецификация базы данных помогает снизить сложность реализации программного обеспечения и снизить затраты на связь.

1. Железный закон строительства склада

-
Железный закон
Уровень
замечание
Набор символов
Используйте UTF-8. Если эмодзи хранятся, используйте utf8mb4 для хранения.
принудительно

Правила сортировки
Используйте utf8_general_ci
принудительно

2. Железный закон построения таблиц

-
Железный закон
Уровень
замечание
экзегеза
Обязательно добавьте полевые аннотации.
принудительно

кодировать
Используйте UTF-8. Если эмодзи хранятся, используйте utf8mb4 для хранения.
принудительно

является ли область концептуальной
Он должен быть назван с is_xx, а тип данных — неподписанный tinyint(1 да, 0 нет), например, is_deleted(1 удаление, 0 не удалено).
принудительно
Любое поле должно быть незнаковым, если оно не отрицательно
Название таблицы, название поля
Можно использовать только строчные буквы, подчеркнуть или цифры; Запрещено начинать с подчёркивания или цифры; Только числа запрещены между двумя подчёркиваниями; Отключить зарезервированные слова; Использование существительных во множественном числе запрещено в названиях таблиц.
принудительно

Название имени базы данных и таблицы
Имя базы данных должно соответствовать названию приложения, а название таблицы — с Business Name_Role таблицы.
принудительно

Наименование индекса
Индекс первичного ключа использует pk_ имя поля; Уникальный индекс с uk_ названием поля; Обычные индексы используют idx_ имена полей.
принудительно
pk_ является первичным ключом; uk_ — уникальный ключ; idx_ — индекс
Десятичный тип
Тип данных десятичный, использование float и double запрещено, float и double имеют потерю точности, и если диапазон хранящихся данных превышает диапазон десятичных, рекомендуется разделить данные на целые и десятичные числа и хранить их отдельно.
принудительно

Тип варчар
varchar — это переменная длинная строка, заранее не выделяется место для хранения, длина не должна превышать 5000 символов, если длина превышает 5000, применяйте текст (создайте отдельную таблицу, используйте первичный ключ для соответствия, чтобы не влиять на эффективность индексации других полей).
принудительно

В названии таблицы должно быть три поля
ID (тип данных — неподписанный bigint, инкремент по одной таблице, размер шага — 1), gmt_create, gmt_modified (время активного создания, пассивное обновление, тип данных — datetime).
принудительно

Резервирование поля
Поля допускают соответствующую избыточность, но необходимо учитывать согласованность данных, и избыточные поля должны иметь 1) редкие модификации; 2) Не слишком длинное поле варчара, не говоря уже о текстовом поле.
Рекомендовать

Разделите базу данных и таблицы
Разбивание рекомендуется только если количество строк в одной таблице превышает 5 миллионов строк или ёмкость одной таблицы превышает 2 ГБ.
Рекомендовать


Установка соответствующей длины хранения символов не только экономит место в таблице данных и индексном хранилище, но, что важнее, повышает скорость поиска.

3. Установить индекс железного закона

-
Железный закон
Уровень
замечание
Уникальный индекс
Области с уникальными характеристиками в бизнесе, даже если они являются комбинацией полей, должны быть уникально индексированы. Хотя уникальный индекс влияет на скорость вставки, эта потеря незначительна, но значительно повышает скорость запросов. Кроме того, даже если на уровне приложений есть очень полный контроль проверки, при отсутствии уникального индекса согласно закону Мерфи, неизбежно будут генерироваться грязные данные.
принудительно

Присоединяйся
Более трёх таблиц запрещают объединение, поля, требующие объединения, и типы данных должны быть согласованными; Когда с запросами связаны несколько таблиц, убедитесь, что соответствующие поля должны иметь индекс. Даже если у вас двойная таблица, обращайте внимание на индексацию таблиц, производительность SQL.
принудительно

Варчарфилд
Длина индекса должна быть указана, и нет необходимости индексировать все поля, достаточно определить длину индекса согласно фактическому различию текста. Длина индекса и различие — это пара противоречий, обычно для данных типа строк индексы длиной 20 имеют степень различия более 90%, которую можно определить по степени различия count(distinct left(название столбца, длина индекса))/count(*).
принудительно

Размытие запрещено при поиске страницы
Поиск по странице запрещает размытие или полное размытие — если нужно, пожалуйста, перейдите в поисковую систему, чтобы решить проблему. Причина запрета: Индексный файл имеет самое левое свойство совпадения дерева B, и если значение слева не определено, то этот индекс нельзя использовать.
принудительно

Порядок
Если есть порядок по сценариям, обратите внимание на упорядочённость индекса. Последнее поле порядка по является частью комбинированного индекса и размещается в конце порядка комбинаций индексов, чтобы избежать file_sort и повлиять на производительность запроса. Пример: где a=? и b=? порядок по c; Индекс должен строиться в виде a_b_c; Контрпример: если в индексе есть поиск по диапазону, то индексная упорядочённость не может быть использована, например, когда a>10 упорядочен по b; Индексные a_b нельзя отсортировать.
Рекомендовать

4. Пишите железные правила SQL

-
Железный закон
Уровень
замечание
count(*)
Не используйте count(название столбца) или count(константа) вместо count(*), что является синтаксисом стандартного количества строк, определённых в SQL92, независимо от базы данных и независимого от NULL и не-NULL. count(*) считает строки с NULL-значением, тогда как count(название столбца) не учитывает строки с этим столбцем NULL.
принудительно

Граф (отдельный перевал)
Считает количество уникальных строк в столбце, кроме NULL. Обратите внимание, что при count(distinct col1, col2), если один из столбцов полностью NULL, то он возвращает 0, даже если другой столбец имеет другое значение.
принудительно

sum(col)
Когда значения столбца все равно NULL, count(col) возвращает 0, а sum(col) — NULL, поэтому при использовании sum() нужно учитывать проблемы с NPE при использовании sum(). Задачи NPE можно избежать следующим образом: выберите if(isnull(sum(g)), 0, sum(g)) из таблицы;
принудительно

isnull
Используйте isnull(), чтобы определить, является ли это NULL-значением. NULL — это NULL по сравнению с любым значением.
принудительно

Логика запроса по страницированию
Если счёт равен 0, его следует вернуть напрямую, чтобы избежать выполнения последующего оператора пагинации.
принудительно

Внешние ключи и каскады
Использование внешних ключей и каскадирования запрещено, и все концепции внешних ключей должны решаться на уровне применения. Причина: внешние ключи и каскады не подходят для распределённых, высококонкурентных кластеров, каскадные обновления сильно блокируют, существует риск бурных обновлений базы данных, а внешние ключи влияют на скорость вставки базы данных.
принудительно

Хранящиеся процедуры
Хранимые процедуры запрещены, а хранимые процедуры сложно отладить и масштабировать, и они не портативны.
принудительно

Коррекция данных
При коррекции данных (особенно при удалении или изменении записей) выберите сначала, чтобы избежать случайного удаления, и выполните команду обновления только после подтверждения его корректности.
принудительно

в
Если этого невозможно избежать, количество элементов после входа следует контролировать в пределах 1000.
Рекомендовать

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


5. ORM отражает законы железа

-
Железный закон
Уровень
замечание
Запрос к таблице
Список полей, которые запрещены использовать * для запросов, должен быть чётким, какие поля обязательны.
принудительно

POJO
Булевый атрибут класса POJO нельзя добавить в is, тогда как поле базы данных должно быть добавлено в is, что требует отображения между полями и атрибутами в resultMap.
принудительно

Параметры возврата
Запрещено использовать resultClass в качестве возвратного параметра, даже если все имена атрибутов классов соответствуют полям базы данных по одному, они должны быть определены; В свою очередь, каждая таблица должна иметь соответствующий ей атрибут. Причина: настройте отображение так, чтобы поле было связано с классом DO для удобства обслуживания.
принудительно

Параметры возврата
Запрещено напрямую использовать HashMap и HashTable в качестве вывода набора результатов запроса. Причина: тип значения атрибута неконтролируем.
принудительно

sql.xml Настроить параметры
sql.xml Используйте #{}, #param# для параметров конфигурации и не используйте ${}, так как ${} подвержен SQL-инъекции.
принудительно

queryForList
Использование queryForList (String statementName, int start, int size), входящего в Mybatis, запрещено. Причина: Он реализуется путём получения всех записей SQL-оператора, соответствующих оператору statementName, в базе данных, а затем использования подсписка для получения подмножества start, size.
принудительно

Время обновления
При обновлении записи таблицы базы данных необходимо одновременно обновлять время изменения записи.
принудительно

Обновление записей таблиц базы данных
Не пишите большой и полный интерфейс для обновления данных (переданный как класс POJO). При выполнении SQL не обновляйте неизменённые поля из-за подверженности ошибкам, неэффективности и увеличения памяти бинлога.
Рекомендовать

@Transactional
@Transactional Не злоупотребляйте транзакциями. Транзакции влияют на QPS базы данных. Кроме того, при использовании транзакций необходимо учитывать различные аспекты схем отката, включая откат кэша, откат поисковых систем, компенсацию сообщений, статистическую коррекцию и т.д.
ссылка

Динамические SQL-теги Mybatis
< compareValue в isEqual> является константой по сравнению с значением атрибута, обычно числом, указывающим на выполнение соответствующего SQL-оператора при равенстве; < isNotEmpty> указывает, что он выполняется, когда он не пуст и не нулевый; < isNotNull> указывает, что он выполняется, когда он не является null.
ссылка








Предыдущий:Операционная карта SEO — это первая карта во всей сети, коллекция ультраполных карт операций в высоком разрешении в Интернете
Следующий:[Earth Science] DK Детская энциклопедия — качественная энциклопедия из Великобритании...
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com