MySQL数据库优化

首先创建几个结构复杂的表,导入10万条以上的数据进行测试。

1.SQL语句的优化

原则 1:尽量避免在列上进行运算,这样会导致索引失效。

例如原SQL语句为:

SELECT * FROM  c WHERE  YEAR (d)

> = 2011;

优化为:

SELECT * FROM c > = '2011-01-01';

原则 2:使用JOIN时,应该用小结果集驱动大结果集。同时把复杂的JOIN查询拆分成多个Query。因为JOIN多个表时,可能导致更多的锁定和堵塞。例如:

SELECT * FROM a JOIN b ON a.id = b.id

LEFT JOIN c ON c.time = a.date

……

原则 3:注意LIKE模糊查询的使用,避免%%。例如:

SELECT * FROM a WHERE name LIKE '%de%'

优化为:

SELECT * FROM a WHERE name > = 'de' AND name <  'df'

原则 4: 仅列出需要查询的字段,这对速度不会有明显影响,主要考虑节省内存。例如:

SELECT * FROM student;

优化为:

SELECT id,name,pwd FROM student;

原则 5: 使用批量插入语句节省交互。例如:

INSERT INTO aa (id,name) VALUES(1,'a');

INSERT INTO aa (id,name) VALUES(2,'b');

INSERT INTO aa (id,name) VALUES(3,'c');

优化为:

INSERT INTO aa (id,name) VALUES(1,'a'),(2,'b'),(3,'c');


原则 6: limit的基数比较大时使用between。例如:

SELECT * FROM article as article ORDER BY id LIMIT 1000000,10;

优化为:

SELECT * FROM article as  article WHERE id BETWEEN 1000000 AND 1000010 ORDER BY id;

BETWEEN限定比LIMIT快,所以在海量数据访问时,建议用BETWEEN或是WHERE替换掉LIMIT。但是BETWEEN也有缺陷,如果id中间有断行或是中间部分id不读取的情况,总读取的数量会少于预计数量!

在取比较后面的数据时,通过desc方式把数据反向查找,以减少前端数据的扫描,让LIMIT的基数越小越好!

原则 7: 不要使用rand函数获取多条随机记录。例如:

SELECT * FROM table ORDER BY rand() LIMIT 20;

改为:

先用PHP产生随机数,把这个字符串传给MySQL,MySQL里用in查询。

原则 8: 避免使用NULL。

原则 9; 不要使用count(id),而应该是count(*)。

原则 10: 不要做无谓的排序操作,而应尽可能在索引中完成排序

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 50多条使用mysql数据库优化建议 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在WHERE及ORDER ...
    环零弦阅读 1,009评论 0 15
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,786评论 18 399
  • 1. Mysql优化介绍 1.1 sql优化 a. sql优化分析b. 索引优化c. 常用sql优化d. 常用优化...
    呦丶耍脾气阅读 581评论 0 1
  • 面试时遇到的问题:千万级的mysql数据库如何优化?作为一个刚入门的phper,遇到这个问题时,我还是压力山大的....
    linfree阅读 746评论 0 7
  • 昨日惊闻我们自强中学创始人老校长毕盛麟仙逝。2017年3月27日中午12:00,天堂的上课铃响了,他又忙去了!就这...
    茶心1阅读 527评论 0 3