SQL. Вопросы оптимизации

243
23 декабря 2017, 03:13

Доброго времени суток.

Вопросов несколько:

  1. Влияет ли размер базы данных на скорость работы с ней (операции типа select, insert и т.д.), допустим в бд есть две таблицы, одна постоянно пополняется и увеличивается в размерах, другая таблица весит не очень много и к ней совершается запрос select, будет ли разница в скорости работы когда первая таблица весит 1 Мб и когда она будет весить 25 МБ?
  2. Что лучше, один большой запрос к бд или несколько маленьких, и как это работает?

P.S.

Использую сервер MySql для бд, работаю с ней с помощью php

Answer 1
  1. Не влияет. Пока Вы работаете с одной таблицей Вас не должно интересовать что происходит с другими таблицами или другими базами на сервер

  2. Как работают выборки

    1. Отправить запрос на сервер
    2. Распарсить запрос на сервере
    3. Найти нужные записи
    4. Сложить записи в буфер
    5. Отправить буфер клиенту

Таким образом при куче мелких запросов пункты 1-3 выполняются для каждого запроса. Особенно тяжелый 3 пункт. Возможен вариант, когда серверу придется на каждый запрос сканировать всю таблицу, чтобы найти нужные записи. Пункты 4-5, просто сложатся вместе и никакого отличия между мелкими запросами и одним большим не будет.

Таким образом, один запрос почти всегда предпочтительнее. Чем куча мелких. Кроме двух исключений:

  1. Объем выбранных записей больше чем памяти на клиенте или сервере
  2. Не факт, что все выбранные записи понадобятся. Например, клиенту совсем не нужно показывать 1000 записей. Достаточно показать 100, а следующие 100 подгрузить уже при необходимости

К слову, даже размер записи не будет влиять на скорость обработки. Т.е. у Вас могут лежать в этой же таблице многомегабайтные БЛОБы, но пока Вы не обращаетесь к ним, у Вас производительность не меняется

READ ALSO
ASP NET как задать язык ресурсов

ASP NET как задать язык ресурсов

Как програмно задать язык ресурсов в ASP?

221
В чем разница asp.net core на .NET Framework и на .NET Core?

В чем разница asp.net core на .NET Framework и на .NET Core?

Я могу создать проект aspnet Core используя

240