Я постоянно вижу, как люди говорят, что индексы замедляются update
, delete
и insert
. Это используется как общее утверждение, как если бы оно было абсолютным.
Настраивая свою базу данных для повышения производительности, я продолжаю сталкиваться с этой ситуацией, которая, кажется, логически противоречит этому правилу для меня, и нигде я не могу найти, чтобы кто-то сказал или объяснил каким-либо иным способом.
В SQL Server, и я полагаю / предполагаю большинство других СУБД, ваши индексы создаются на основе определенных вами столбцов. Вставки и удаления всегда будут влиять на всю строку, поэтому они никак не повлияют на индекс, но обновления кажутся немного более уникальными, они могут затрагивать только определенные столбцы.
Если у меня есть столбцы, которые не включены ни в один индекс, и я обновляю их, они замедляются только потому, что у меня есть индекс для других столбцов в этой таблице?
Например, скажем, в моей User
таблице у меня есть один или два индекса, первичный ключ, который является столбцом Identity / Auto Increment, и, возможно, другой в некотором столбце внешнего ключа.
Если я обновлю столбец без индекса непосредственно по нему, как, например, по номеру телефона или адресу, замедлится ли это обновление, потому что у меня есть индексы по этой таблице для других столбцов в любой ситуации? Столбцы, которые я обновляю, не находятся в индексах, поэтому, логически, индексы не должны обновляться, не так ли? Во всяком случае, я думаю, что они ускоряются, если я использую индексы в предложении WHERE.
so there is no way they will not affect the index
кроме отфильтрованных индексов ...