mysql高级:数据库优化

来源:互联网 发布:微信pk10源码 编辑:程序博客网 时间:2024/05/20 09:44
数据库优化的基本十条原则。


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.不要做无谓的排序操作,而应尽可能在索引中完成排序。
0 0
原创粉丝点击