select productCount from product where productId = 1 for update;
update product set productCount = productCount - 1 where productId = 1
这个语句是手动加锁吧,加锁会在什么时候结束,是执行完更新语句吗?
基于Monster 组和GPT的调写:
案例:给邮箱加索引
-- 普通索引,包含了每个记录的整个字符串;
alter table User add index index1(email);
-- 前缀索引,对于每个记录都是只取前 6 个字节
ALTER TABLE User ADD INDEX index2(email(6));
前缀索引:
执行以下SQL
select id,name,email from SUser where email='zhangssxyz@xxx.com';
zhangssxyz@xxx.com
的记录主键为ID2zhangs
的记录,找到的第一个是ID1idnex2
上取到的值不是 zhangs
时,循环结束根据实际效果,使用前缀索引,要定义和长度,就可以做到既节省空间,有不用额外增多太多的查询成本
怎么才能确定我该使用多长的前缀呢?
关注区分度,区分度越高,意味着重复的值越少,索引要统计带建立的索引上有多少不同的值,建议使用以下SQL
取统计一下有多少个不同的值
使用前缀索引会损伤区分度,一般选择不小于95%的比例
select count(distinct email) as L from SUser;
-- 统计4-7个字节的前缀索引
select
count(distinct left(email,4)) as L4,
count(distinct left(email,5)) as L5,
count(distinct left(email,6)) as L6,
count(distinct left(eamil,7)) as L7
from SUer;