当数据库中存在千万条数据的时候怎样进行优化?

215 阅读2分钟

本文章纯属个人观点!!!

1.索引上的优化

  • 索引不是越多越好,针对性地建立索引,索引会加速查询,到但是对新增、修改、删除会造成一定的影响;
  • 值域很少的字段不适合建索引
  • 尽量不用 UNIQUE,不要设置外键,由程序保证;
  • 尽量使用索引,也要保证不要因为错误的写法导致索引失效;比如:避免前导模糊查询,避免隐式转换,避免等号左边做函数运算,in 中的元素不宜过多等等;

2.增加缓存

  • 主要的思想就是减少对数据库的访问,缓存可以在整个架构中的很多地方;比如:数据库本身有就缓存,客户端缓存,数据库访问层对 SQL 语句的缓存,应用程序内的缓存等,第三方缓存(如 Redis等);

3.字段设计

  • 单表不要有太多的字段;
  • 选取最适用的字段属性,能使用 char(定长字符串) 的尽量不使用 varchar(变长字符串)
  • MySQL 可义很好的支持大数据的存取,但是一般来说,数据库中表越小,在它上面执行的查询也就会越快。因此在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。比如在已经知道字段内容的大小得时候,尽量使用char 设置的长度为内容所占用的长度,而不是使用varchar。

4.SQL 语句的优化

  • 使用链接来代替子查询,可以使用SELECT 语句创建一个单例的查询结果,然后把这个结果作为过滤条件用在另一个查询中。 代码示例( DELETE FROM user WHERE id NOT IN (SELECT pid FROM STAFF) : 删除不在员工表中存在的用户 )
  • 使用联合(UNION)来代替手动创建的临时表。mysql可以把需要使用临时表的两条或者更多的select查询合并到一个查询中

5.使用事物

  • 事务: 不是所有的数据库操作都可以只用一条或者少数几条SQL语句就可以完成的。更多的时候需要用到一系列的语句来完成某种工作。可以保持数据库中数据的完整性和一致性

6.锁定表

  • 锁定表 由于在事务执行的过程中,数据库将会被锁定,因此其他的用户请求只能暂时等直到该事务结束。有些情况下我们可以通过锁定表的放大来获得更好的性能。

7.使用外键

  • 使用外键,锁定表的方法可以保护数据的完整性,但是却不能保证数据的关联性。此时我们可以使用外键。