您的位置:首页 > 数据库 > MySQL

mysql高级:数据库优化

2016-06-22 22:39 621 查看
数据库优化的基本十条原则。

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

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

    例如:

        SELECT * FROM A JOIN B ON A.id = B.id LEFT JOIN C ON C.time = A.date LEFT JOIN D ON C.pid = B.aid LEFT JOIN E ON E.cid = A.did

3.注意LIKE模糊查询的使用,避免%%。

    例如:

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

        优化为

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

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

5.使用批量插入语句节省交互。

6.limit的基数比较大时使用between。

    例如:

        SELECT * FROM article order by id limit 1000000,10

        优化为

        SELECT * FROM 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;

        优化

        SELECT * FROM table AS t1 JOIN (SELECT ROUND (rand() * ((SELCT MAX (id) FROM table) - (SELECT MIN(id) FROM table)) + (SELECT MIN(id) FROM table)) AS id) AS t2 WHERE t1.id >=t2.id ORDER BY t1.id LIMIT 1;

        这是获取一条随机记录,这样即使执行20次,也比原来的语句高效。或者先用PHP产生随机数,把这个字符串传给mysql,mysql里用in查询。

8.避免使用NULL。

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

10.不要做无谓的排序操作,而应尽可能在索引中完成排序。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息