请输入关键字
2019-04 17

公司网站建设MySQL数据库优化

MySQL优化的主要方法:


1.优化索引、SQL语句、分析慢查询;


2.设计表的时候严格按照数据库的设计范式来设计数据库;


3.我们还可以将我们的业务架构进行缓存,静态化和分布式;


4.不用全文索引,使用Xunsearch,ES或者云服务器上的索引;


5.如果效率还是不够好,可以采用主从方式将数据读写分离;


6.可以加上memcached缓存,将经常被访问到但不经常变化的数据放至memcached缓存服务器里面,这样的话能够节约磁盘I/O


7.还可以优化硬件,在硬件层面,我们可以使用更好的一些硬盘(固态硬盘),使用一些磁盘阵列技术(raid0raid1raid5

- raid0:最简单的(两块硬件相加100G+100G=200G

- raid1:镜像卷,把同样的数据下两份。可以随即从A/B里面读取,效率更高,硬盘坏了一块数据也不会丢失;

- raid5:3块硬盘,坏了一块,另外两块也能工作。


8.如果还是慢,先不要切分表,可以使用MySQL内部自带的表分区技术,将数据分成不同的文件,这样能够让磁盘在读取的时候效率更高;


9.可以做垂直分表,将不经常用读的数据放到另外一个表里去(节约磁盘I/O);


10.数据量特别大,我们优化起来会很困难,这时可以使用数据库中间件的方式,将数据进行分库分表分机器。(原理:数据路由);


11.此外,还可以采用一些更快的存储方式,例如NoSQL存储一些我们需要经常访问到的数据(数据库取出来后,再到NoSQL中取出一些其他数据);


12.此外还有一些表引擎选择,参数优化还有些相关的小技巧都是优化MySQL的方式;

 比如:MySQL索引的优化方面;


    只要列中含有NULL值,就最好不要在此例设置索引,复合索引如果有NULL值,此列在使用时也不会使用索引


    尽量使用短索引,如果可以,应该制定一个前缀长度


    对于经常在where子句使用的列,最好设置索引,这样会加快查找速度


    对于有多个列where或者order by子句的,应该建立复合索引


    对于like语句,以%或者‘-’开头的不会使用索引,以%结尾会使用索引


    尽量不要在列上进行运算(函数操作和表达式操作)


    尽量不要使用not in<>操作

 

MySQL语句的优化方面:


    查询时,能不要*就不用*,尽量写全字段名


    大部分情况连接效率远大于子查询


    多使用explainprofile分析查询语句


    查看慢查询日志,找出执行时间长的sql语句优化


    多表连接时,尽量小表驱动大表,即小表 join 大表


    在千万级分页时使用limit


    对于经常使用的查询,可以开启缓存

 

   MySQL表的优化方面:


    表的字段尽可能用NOT NULL


    字段长度固定的表查询会更快


    把数据库的大表按时间或一些标志分成小表


    将表分区

 

    使用联合(UNION)来代替手动创建的临时表优化MySQL方面;

 

  MySQL4.0的版本开始支持union查询,它可以把需要使用临时表的两条或更多的select查询合并的一个查询中。在客户端的查询会话结束的时候,临时表会被自动删除,从而保证数据库整齐、高效。使用union来创建查询的时候,我们只需要用UNION作为关键字把多个select语句连接起来就可以了,要注意的是所有select语句中的字段数目要想同。下面的例子就演示了一个使用UNION的查询。

 

    SELECT   name,phone  FROM  client UNION

    

    SELECT  name,birthdate  FROM  author  UNION

    

    SELECT  name,supplier FROM product