数据库优化

(1)选择最适用的字段属性

  一般说来数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小

  例如定义邮政编码这个字段,如果将其设置为CHAR(255)显然给数据库增加了不必要的空间,甚至使用VARCHAR这种类型也是多余的,因为CHAR(6)就可以很好的完成任务了。

  另外可以应该尽量把字段设置为NOTNULL,这样在将来执行查询的时候,数据库不用去比较NULL值。

(2)避免全表扫描

  1)应尽量避免在where子句中使用!=或<>操作符或者对字段进行 null值判断,否则将导致存储引擎放弃使用索引而进行全表扫描。

  2)尽量避免使用in 和not in,会导致数据库引擎放弃索引进行全表扫描。如果是子查询,可以用exists代替。如下:SELECT * FROM t1 WHERE EXISTS (SELECT * FROM t2 WHERE t1. name = t2. name)

  3)尽量避免在字段开头模糊查询,会导致数据库引擎放弃索引进行全表扫描。SELECT * FROM t WHERE username LIKE '%li%'。优化方式:尽量在字段后面使用模糊查询。

(3)使用索引

  索引可以令数据库服务器以比没有索引快得多的速度检索特定的行。可以在频繁使用的、用以缩小查询范围的字段上或者需要排序的字段上建立索引。使用索引来提高查询的速度。

  优化索引:

1)索引列务必重复度低。 (例如对于人事表的性别列,在查询的结果中,结果集的数据行占了表中数据行的很大比例,即需要在表中搜索的数据行的比例很大。增加索引并不能明显加快检索速度。)

2)使用索引就不能用OR查询,否则索引不起作用。(where条件中使用or,索引就会失效,会造成全表扫描 )

3)使用索引,like模糊查询不能以%开头(会造成全表扫描)

4)查询条件务必以索引列开头,否则索引失效

5)联合索引遵守最左原则,即检索数据的时候从组合索引的最左边开始匹配。使用联合索引要注意不要重复创建彼此有包含关系的索引。  假设对表M的a、b、c字段建立组合索引:则只有查询条件为(a),(a,b),(a,b,c)才会使用组合索引。那这时就不要重复建立批次有包含关系的索引:index1(a,b,c) 、index2(a,b)、index3(a)

(4)避免查询不必要的字段

  尽量避免使用select *,返回无用的字段会降低查询效率。

 

char与varchar的区别?

(1)char的长度是不可变的,而varchar的长度是可变的,

定义一个char[10]和varchar[10],如果存进去的是‘abcd’,那么char所占的长度依然为10,除了字符‘abcd’外,后面跟六个空格,而varchar就立马把长度变为4了,取数据的时候,char类型的要用trim()去掉多余的空格,而varchar是不需要的,

(2)char的存取数还是要比varchar要快得多,因为其长度固定,方便程序的存储与查找;但是char也为此付出的是空间的代价,因为其长度固定,所以难免会有多余的空格占位符占据空间,可谓是以空间换取时间效率,而varchar是以空间效率为首位的。

(3)char的存储方式是:对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节;而varchar的存储方式是,对每个英文字符占用2个字节,汉字也占用2个字节,两者的存储数据都非unicode的字符数据。

posted on 2019-09-08 23:14  Toria  阅读(225)  评论(0编辑  收藏  举报

导航