当前位置: 首页 > 科技观察

库存指标设计规范那些事儿

时间:2023-03-17 14:46:18 科技观察

本文转载自微信公众号《UP技控》,作者conan5566。转载本文请联系UP技控公众号。1.限制每张表的索引数量。建议单表索引不超过5个。越多越好!索引可以提高效率,但也会降低效率。索引可以提高查询效率,但也会降低插入和更新的效率,在某些情况下甚至会降低查询效率。因为mysql优化器在选择如何优化查询时,会根据统一的信息对各个可用的索引进行评估,生成最佳的执行计划。如果有多个索引可以同时用于查询,会增加mysql优化器生成执行计划的时间,也会降低查询性能。2、禁止为表中的每一列创建单独的索引。在5.6版本之前,一条SQL只能在一张表中使用一个索引。5.6以后,虽然有合并索引的优化方法,但是离使用联合索引的查询方法好还差得很远3.Innodb的每张表都必须有一个主键。Innodb是一个索引组织表:数据存储的逻辑顺序和索引的顺序是一样的。每个表可以有多个索引,但表只能有一个存储顺序。Innodb根据主键索引的顺序组织表。不要使用频繁更新的列作为主键,多列主键不适用(相当于联合索引)。不要使用UUID、MD5、HASH、string列作为主键(不能保证数据的顺序增长)。主键推荐使用自增ID值。常用索引列建议SELECT、UPDATE、DELETE语句的WHERE子句中出现的列包含ORDERBY、GROUPBY、DISTINCT中的字段,不要为匹配字段的列创建索引in1and2.通常,12.最好对2中的字段建立联合索引2.多表join的关联列如何选择索引列的顺序?数据,从磁盘读取的数据越少。最高区分度放在联合索引的最左边(区分度=列中不同值的个数/列中的总行数);尽量把字段长度小的列放在联合索引的最左边(因为字段长度越小,一个页可以存储的数据量越大,IO性能越好);最常用的列放在联合索引的左侧(这样可以建立更少的索引)。避免创建冗余索引和重复索引,因为这会增加查询优化器生成执行计划的时间。重复索引示例:primarykey(id),index(id),uniqueindex(id)冗余索引示例:index(a,b,c),index(a,b),index(a)优先覆盖索引对于频繁查询,应优先使用覆盖索引。覆盖索引:是覆盖索引,包括所有查询字段(where、select、orderyby、groupby字段)。索引覆盖索引的好处:避免Innodb表索引的二次查询。Innodb是按照聚集索引的顺序存储的。对于Innodb来说,二级索引存储的是叶子节点中行的主键信息。如果使用二级索引查询数据,找到对应的键值后,必须通过主键进行二级查询才能获得。我们真正需要的数据。在覆盖索引中,所有的数据都可以在二级索引的key值中获取,避免了主键的二次查询,减少IO操作,提高查询效率。可以把随机IO变成顺序IO来加快查询效率。由于覆盖索引是按照键值顺序存储的,对于IO密集型范围搜索,数据IO要比从磁盘随机读取每一行要少得多。因此,使用覆盖索引也可以在访问时将磁盘的随机读IO转化为索引查找的顺序IO。索引SET规范尽量避免使用外键约束。不建议使用外键约束(foreignkey),但一定要在表间的关联键上建立索引;可以使用外键来保证数据的引用完整性,但建议使用业务端实现;外键会影响父表和子表的写操作,从而降低性能。