原文 我的mysql数据库sql优化原则

一、前提

  这里的原则 只是针对mysql数据库,其他的数据库 某些是殊途同归,某些还是存在差异。我总结的也是mysql普遍的规则,对于某些特殊情况得特殊对待。在构造sql语句的时候养成良好的习惯

二、原则总结

  

  原则1、仅列出需要查询的字段,这对速度不会明显的影响,主要是考虑节省应用程序服务器的内存。

    原来语句: select * from admin

    优化为: select admin_id,admin_name,admin_password from admin

  原则2、尽量避免在列上做运算,这样导致索引失效

    原语句: select * from admin where year(admin_time)>2014

    优化为: select * from admin where admin_time> '2014-01-01'

  原则3、使用JOIN 时候,应该用小的结果驱动大的结果(left join 左边表结果尽量小 如果有条件应该放到左边先处理,right join 同理反向),同事尽量把牵涉到多表联合的查询拆分多个query(多个连表查询效率低,容易到之后锁表和阻塞)

    原来语句 select * from admin left join log on admin.admin_id = log.admin_id where log.admin_id>10

    优化为: select * from (select * from admin where admin_id>10) T1 left join log on T1.admin_id = log.admin_id

  原则 4、注意LIKE 模糊查询的使用, 避免使用 %% ,可以使用 后面带% ,双%是不走索引的

    原来语句: select * from admin where admin_name like '%de%'

    优化为: select * from admin where admin_name >='de' and admin_nam <'df' (注意不是等效的这里试试提供优化的思路)

  原则5、使用批量插入节省交互 (当如如果使用存储过程来处理批量的sql 各种逻辑是更好的选择)

    原来语句:insert into admin(admin_name,admin_password) values ('test1','pass1');

        insert into admin(admin_name,admin_password) values ('test2','pass2');

        insert into admin(admin_name,admin_password) values ('test3','pass3')

    优化为: insert into admin(admin_name,admin_password) values('test1','pass1'),('test2','pass2'),('test3','pass3')

  原则6、limit 的基数比较大时使用between

    原来语句:select * from admin order by admin_id limit 100000,10

    优化为:  select * from admin where admin_id between 100000 admin 100010 order by admin_id

  原则7、不要使用rand函数获取多条随机记录

    原来语句: select * from admin order by rand() limit 20

    优化为: select * from admin as t1 Join(select round(rand()*((select max(admin_id) from admin)-(select min(id) from admin))+(select min(id) from admin)) as id) as t2 where t1.id>=t2.id order by t1.id limit

  原则8、避免使用NULL

  原则9. 不要使用 count(id) 使用 count(*)

  

  原则10、不要做无谓的排序操作,而应该使用索引完成排序

三、总结:

  数据库优化包括两个方面,一方面是sql 程序优化,另一方面是数据库配置的优化。另外在mysl 可以通过 以下语句来查看帮助sql进行优化

set @@profiling = 1;
select * from typecho_comments order mail limit 10,30;
show profiles; show profile for query *

我的mysql数据库sql优化原则的更多相关文章

  1. mysql数据库sql优化

    此文章为转载 一. 前提 这里的原则 只是针对mysql数据库,其他的数据库 某些是殊途同归,某些还是存在差异.我总结的也是mysql普遍的规则,对于某些特殊情况得特殊对待.在构造sql语句的时候养成 ...

  2. mysql数据库sql优化——子查询优化

    1.什么是子查询.表关联查询: 子查询:是指在主sql语句中的select或where子句中使用select查询语句:select a.name,(select b.name from b where ...

  3. mysql数据库性能优化(包括SQL,表结构,索引,缓存)

    优化目标减少 IO 次数IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当 ...

  4. MySQL数据库性能优化:表、索引、SQL等

    一.MySQL 数据库性能优化之SQL优化 注:这篇文章是以 MySQL 为背景,很多内容同时适用于其他关系型数据库,需要有一些索引知识为基础 优化目标 减少 IO 次数IO永远是数据库最容易瓶颈的地 ...

  5. mysql数据库SQL执行分析,优化前必备分析

    概述 一般我们在对mysql数据库做优化,肯定需要对慢sql去做分析才能开始优化,那么有什么分析的方法呢?下面通过对sql执行时间和执行情况来做分析. 一.SQL 执行时间分析 通过找到执行时间长的 ...

  6. 关于数据库SQL优化

    1.数据库访问优化   要正确的优化SQL,我们需要快速定位能性的瓶颈点,也就是说快速找到我们SQL主要的开销在哪里?而大多数情况性能最慢的设备会是瓶颈点,如下载时网络速度可能会是瓶颈点,本地复制文件 ...

  7. 基于MySQL 的 SQL 优化总结

    文章首发于我的个人博客,欢迎访问.https://blog.itzhouq.cn/mysql1 基于MySQL 的 SQL 优化总结 在数据库运维过程中,优化 SQL 是 DBA 团队的日常任务.例行 ...

  8. MYSQL数据库的优化

    我们究竟应该如何对MySQL数据库进行优化?下面我就从MySQL对硬件的选择.MySQL的安装.my.cnf的优化.MySQL如何进行架构设计及数据切分等方面来说明这个问题. 服务器物理硬件的优化 在 ...

  9. [转]MySQL数据库的优化-运维架构师必会高薪技能,笔者近六年来一线城市工作实战经验

    本文转自:http://liangweilinux.blog.51cto.com/8340258/1728131 年,嘿,废话不多说,下面开启MySQL优化之旅! 我们究竟应该如何对MySQL数据库进 ...

随机推荐

  1. POJ 1410 Intersection(线段相交&amp;&amp;推断点在矩形内&amp;&amp;坑爹)

    Intersection 大意:给你一条线段,给你一个矩形,问是否相交. 相交:线段全然在矩形内部算相交:线段与矩形随意一条边不规范相交算相交. 思路:知道详细的相交规则之后题事实上是不难的,可是还有 ...

  2. git 解决冲突的办法

    在项目中使用git管理,冲突是在所难免的.假设没办法解决冲突,能够试试这个办法. 第一步.对project进行备份,最好是复制到其它目录中 第二步.在cmd命令栏上,进入到project文件夹下.这里 ...

  3. iOS创建本地通知和删除对应的通知,工作日通知

    本文的代码主要是:创建本地通知,删除对应的本地通知,创建工作日闹钟 直接上代码: // // ViewController.m // LocalNSNotification // // Created ...

  4. 字符设备驱动1:新的方式添加cdev + 在open函数中将文件私有数据指向设备结构体

    本例中,驱动入口处,使用cdev_add添加驱动,这点也可与字符设备驱动0:一个简单但完整的字符设备驱动程序对比一下. 另外主要讲xx_open实现文件私有数据指向设备结构体. 引子: 偶然看到,在j ...

  5. win8.1镜像制作

    使用自带的powerShell工具,以管理员身份运行,比如镜像的目标位置为F盘,那么用下面的命令即可, wbAdmin start backup -backupTarget:F: -include:C ...

  6. session的简单使用

    前面提到使用httpredirect给用户提交表单之后,防止浏览器back重新提交一次,下面再用session的方法来防止用户这一行为,首先在django中配置session,默认情况下django会 ...

  7. Ruby学习-第一章

    第一章 字符串,数字,类和对象 为了证明Ruby真的好用,hello world也能写的如此简洁: puts 'hello world' 1.输入/输出 print('Enter your name' ...

  8. Bad Hair Day(单调栈 )

    Bad Hair Day Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 15941   Accepted: 5382 Des ...

  9. 使用gson(一)

    1.数组和json的转换 package com.test.gson; import com.google.gson.Gson; public class ArrayToJson { public s ...

  10. opencv保存视频

    利用opencv提供的方法,从摄像头获取视频,并保存为.avi格式文件. win8.1,opencv248,vs2013下测试 #include<opencv\cv.h> #include ...