设计表时要注意:
1.表字段避免null值出现,null值很难查询优化且占用额外的索引空间,推荐默认数字0代替null。
2.尽量使用INT而非BIGINT,如果非负则加上UNSIGNED(这样数值容量会扩大一倍),当然能使用TINYINT、SMALLINT、MEDIUM_INT更好。
3.使用枚举或整数代替字符串类型
4.尽量使用TIMESTAMP而非DATETIME
5.单表不要有太多字段,建议在20以内
6.用整型来存IP
索引
性价比是相对而言的,对于一些不熟悉国外葡萄酒供货价或市场价的代理商,要对性价比进行判断比较困难,所以,在进行判断时,一般最好求教一些品酒好手的评价,比对市面熟悉的产品,然后根据厂商报价推算完税价、批发价、零售价,看看零售价是否和比对相当的产品低,如果低得越多、差距越大,说明性价比越好。
性价比是相对而言的,对于一些不熟悉国外红酒供货价或市场价的代理商,要对性价比进行判断比较困难,所以,在进行判断时,一般最好求教一些品酒好手的评价,比对市面熟悉的产品,然后根据厂商报价推算完税价、批发价、零售价,看看零售价是否和比对相当的产品低,如果低得越多、差距越大,说明性价比越好。
假设你在sales表(selesid,salesdate,salespersonid,productid,qty)的外键列(productid)上创建了一个索引,假设productid列是一个高选中性列,那么任何在where子句中使用索引列(productid)的select查询都会更快,如果在外键上没有创建索引,将会发生全部扫描,但还有办法可以进一步提升查询性能。
扫描命令(sweep command)——能以较以往更快的速度创建复杂的扫描形状,结果更加可靠和可预测,能在截面中自动创建扫描得到的圆弧,还能从一个方向或两个方向进行双向扫描。
在实际应用中,常要求按某些条件进行查询,显示的字段也不一定是全部,可以通过为sql语句添加where子句来实现条件查询,要显示部分字段可以通过指定字段列表或设置datagridview的columns属性来实现。
where 子句中的“=”左边进行函数、算术运算或其他表达式运算,可能导致无法正确使用索引(不能动字段)。
where 子句中对字段进行 null 值判断时,会导致引擎放弃使用索引而进行全表扫描(可以在列上设置默认值0,确保表中的列没有null值)。
4.应尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描,如:。
3.值分布很稀少的字段不适合建索引,例如"性别"这种只有两三个值的字段
4.字符字段只建前缀索引
5.字符字段最好不要做主键
6.不用外键,由程序保证约束
7.尽量不用UNIQUE,由程序保证约束
8.使用多列索引时主意顺序和查询条件保持一致,同时删除不必要的单列索引
简言之就是使用合适的数据类型,选择合适的索引
选择合适的数据类型(1)使用可存下数据的最小的数据类型,整型 < date,time < char,varchar < blob(2)使用简单的数据类型,整型比字符处理开销更小,因为字符串的比较更复杂。如,int类型存储时间类型,bigint类型转ip函数(3)使用合理的字段属性长度,固定长度的表会更快。使用enum、char而不是varchar(4)尽可能使用not null定义字段(5)尽量少用text,非用不可最好分表# 选择合适的索引列(1)查询频繁的列,在where,group by,order by,on从句中出现的列(2)where条件中<,<=,=,>,>=,between,in,以及like 字符串+通配符(%)出现的列(3)长度小的列,索引字段越小越好,因为的存储单位是页,一页中能存下的数据越多越好(4)离散度大(不同的值多)的列,放在联合索引前面。查看离散度,通过统计不同的列值来实现,count越大,离散程度越高:
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-92645-2.html
不可逞一念之勇
你和他们差不多