SQL优化策略
mysql添加索引
1、主键索引
LATER TABLE 'table_neme' ADD PRIMARY KEY('column');
2、唯一索引
unique空串(null)可以放多个 如果是具体的内容则不能重复
a: 肯定在where条经常使用 ;
b: 该字段的内容不是唯一的几个值(sex); (只有三个数据形成2级二叉树)
c: 字段内容不是频繁变化.
ALTER TABLE 'table_name' ADD UNIQUE ('column');
3、普通索引
ALTER TABLE 'table_name' ADD INDEX ('column');
4、全文索引(主要是针对对文件,文本的检索, 比如文章, 全文索引针对MyISAM有用)
ALTER TABLE 'table_name' ADD FULLTEXT ('column');
5、多列索引
ALTER TABLE 'table_name' ADD INDEX index_name('column1','column2','column3');
更详细的添加索引的方法
mysql中可以使用alter table这个sql语句来为表中的字段添加索引。
ALTER TABLE <表名> ADD INDEX <字段>;
ag:我们来尝试为test中t_name字段添加一个索引
alter table test add index(t_name);
这个会产生结果,t_name字段的key这一览由原来的空白变成了MUL.
这个的含义就是该列的值是可以重复的,该列是一个非唯一索引的签到列,或者是一个唯一索引的组成部分但是可以含空值NULL。
SQL优化分三个方面:
1、慢查询
2、索引
3、拆分表
SQL优化之索引:
1、在表中建立索引,优先考虑where、group by使用到的字段
2、尽量避免使用select *,返回无用的字段会降低查询效率。
优化方法:使用具体的字段代替*,只返回使用到的字段。
3、尽量避免使用in和not in,会导致数据库引擎放弃索引,进行全表扫描。
如下:SELECT * FROM t WHERE id IN(2,3)
SELECT * FROM t1 WHERE usename IN(SELECT username FROM t2)
优化方法:如果是连续数值,可以用between代替,如下:
SELECT * FROM t WHERE id BETWEEN 2 AND 3
如果是子查询,可以使用exists代替,如下:
SELECT * FROM t1 WHERE EXISTS (SELECT * FROM WHERE t1.username=t2.username);
4、尽量避免使用or,会导致数据库引擎放弃索引查询而进行全表扫描。如下:
SELECT * FROM t WHERE id = 1 OR id = 3;
优化方式:可以使用union代替or。如下:
SELECT * FROM t WHERE id = 1
UNION
SELECT * FROM t WHERE id = 3;
(ps:如果or两边的字段是同一个,如例子中的这样。貌似两者效率差不多,其实union扫描的索引,or扫描的是全表)
5、尽量避免在字段开头模糊查询,会导致数据库引擎放弃索引进行全表扫描,如下:
SELECT * FROM t WHERE username LIKE '%li%';
优化方式:尽量在字段后面使用模糊查询,如下:
SELECT * FROM t WHERE username LIKE 'li%';
6、尽量避免进行null值的判断,会导致数据可引擎放弃索引而进行全表扫描。如下:
SELECT * FROM t WHERE score IS NULL;
优化方式:可以给字段添加默认值0,对0值进行判断。
如下:
SELECT * FROM t WHERE score = 0;
7、尽量避免在where条件中等号的左侧进行表达式、函数操作,会导致数据库引擎放弃索引进行全表扫描。如下:
SELECT * FROM t2 WHERE SCORE/10 = 9;
SELECT * FROM t2 WHERE SUBSTR(USERNAME,1,2)='li';
优化方式:可以将表达式、函数操作移动到等号右侧。如下:
SELECT * FROM t2 WHERE score = 10*9;
SELECT * FROM t2 WHERE username LIKE 'li%';
8、当数据量大时,避免使用where 1=1的条件。通常为了方便拼装查询条件,我们会默认使用该条件,数据库引擎会放弃索引进行全表扫描。
如下:
SELECT * FROM t WHERE 1=1;
优化方式:用代码拼装sql时进行判断,没where加where,有where加and.
SQL优化之慢查询:
1)、数据库中设置sql慢查询
一、第一步,开启mysql慢查询
方式一:修改配置文件,在my.ini增加几行,主要是慢查询的定义时间(超过2秒就是慢查询),以及慢查询log日志记录(slow_query_log)
//定义超过多少秒的查询是慢查询,这里定义的是2秒
long_query_time=2
//记录下没有使用索引的query
long_query_not_using_indexes
第二步:通过mysql数据库开启慢查询
mysql->set global slow_query_log=ON
mysql->set global long_query_time = 3600
mysql->set global long_querise_not_using_indexes = ON
未完,待续
SQL优化策略的更多相关文章
- Spark SQL概念学习系列之Spark SQL 优化策略(五)
查询优化是传统数据库中最为重要的一环,这项技术在传统数据库中已经很成熟.除了查询优化, Spark SQL 在存储上也进行了优化,从以下几点查看 Spark SQL 的一些优化策略. (1)内存列式存 ...
- SQL优化策略高级优化经常使用-1(The Return Of The King)
1 经常使用的优化策略 1.1 语句 1.1.1使用实际的列名 当我们查询SQL语句时.你是否觉得使用实际的列名比使用*更快呢?答案是肯定的. 为了证实这一点,感兴趣的朋友能够自己验证一下.我这 ...
- sql优化策略之索引失效情况二
详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp63 接第一篇索引失效分析:http://grefr.iteye.co ...
- 47、Spark SQL核心源码深度剖析(DataFrame lazy特性、Optimizer优化策略等)
一.源码分析 1. ###入口org.apache.spark.sql/SQLContext.scala sql()方法: /** * 使用Spark执行一条SQL查询语句,将结果作为DataFram ...
- MySQL中的SQL的常见优化策略
MySQL中的SQL的常见优化策略 MySQL中的索引优化 MySQL中的索引简介 1 避免全表扫描对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索 ...
- 52 条 SQL 语句性能优化策略,建议收藏
本文会提到 52 条 SQL 语句性能优化策略. 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在where及order by涉及的列上建立索引. 2.应尽量避免在where子句中对字段进行nul ...
- Mysql 52条SQL语句性能优化策略汇总
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在where及order by涉及的列上建立索引. 2.应尽量避免在where子句中对字段进行null值判断,创建表时NULL是默认值,但大多数时候应 ...
- SQL语句性能优化策略
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 WHERE 及 ORDER BY 涉及的列上建立索引.2.应尽量避免在 WHERE 子句中对字段进行 NULL 值判断,创建表时 NULL 是默认 ...
- PHP中的数据库一、MySQL优化策略综述
前些天看到一篇文章说到PHP的瓶颈很多情况下不在PHP自身,而在于数据库.我们都知道,PHP开发中,数据的增删改查是核心.为了提升PHP的运行效率,程序员不光需要写出逻辑清晰,效率很高的代码,还要能对 ...
随机推荐
- Two-stream双流总结
1.2014.Two-stream convolutional networks for action recognition in videos 两个流:空间流做single frame,时间流做m ...
- 1. Linux基本操作和基本命令
常用快捷键: Ctrl + d : 结束符 Ctrl + c : 中断前台进程 Ctrl + z : 将前台进程停止掉 创建终端: 创建终端标签:Ctrl + Shift + t; 切换标签: A ...
- Docker监控容器资源的占用情况
启动一个容器并限制资源 启动一个centos容器,限制其内存为1G ,可用cpu数为2 [root@localhost ~]# docker run --name os1 -it -m 1g --cp ...
- 浏览器F12功能键对测试工程师的重要性
F键,功能键,Function键.F12常用于网站界面测试.调试,分析网页所出现的问题,查看html元素.查看响应事件等方面. 打开一个网页,点击F12,弹出一个窗口,其窗口的功能如下: 1 Elem ...
- 【并行计算-CUDA开发】从熟悉到精通 英伟达显卡选购指南
举报 说到显卡,就不免令人想到英伟达和AMD两家面向个人消费级和企业级最大的显示芯片生产企业,英伟达和AMD,今天小编为大家简单的介绍一下英伟达的显卡选购方面的攻略,为一些想要购买显卡的用户提供一些参 ...
- mysql 插入数据后返回自增 ID 的七种方法
参考地址:https://blog.csdn.net/qq_30715329/article/details/80868411 其中使用函数方式.存储过程方式.注解方式.xml属性方式设置都可. 常用 ...
- pramfs理论
一.文件系统 1.百度百科: http://baike.baidu.com/link?url=WE3aLsszfbZZIPK-Vz8yPd799_RMqyfQZ4D-ETS5yd1nI8XzPK660 ...
- es5实现map/filter
// ES5循环循环实现filter const selfFilter = function (fn, context) { let arr = Array.prototype.slice.call( ...
- Infix to Postfix Expression
Example : Infix : (A+B) * (C-D) ) Postfix: AB+CD-* 算法: 1. Scan the infix expression from left to rig ...
- 设置gridView 行号 行号宽
gridView1.IndicatorWidth=30; //设置行号宽度 //对gridView1的CustomDrawRowIndicator事件进行操作 进行行号显示 private stati ...