1.MySQL范式

第一范式(1NF):数据表的每一列都要保持它的原子特性,也就是列不能再被分割。

第二范式(2NF):属性必须完全依赖于主键,消除部分依赖。

第三范式(3NF):消除传递依赖。

2.MySQL查询优化

count的优化

计算id大于5的城市 a. select count(*) from world.city where id > 5; b. select (select count(*) from world.city) – count(*) from world.city where id <= 5; a语句当行数超过11行的时候需要扫描的行数比b语句要多, b语句扫描了6行,此种情况下,b语句比a语句更有效率。当没有where语句的时候直接select count(*) from world.city这样会更快,因为mysql总是知道表的行数。

避免使用不兼容的数据类型。

例如float和int、char和varchar、binary和varbinary是不兼容的。数据类型的不兼容可能使优化器无法执行一些本来可以进行的优化操作。 在程序中,保证在实现功能的基础上,尽量减少对数据库的访问次数;通过搜索参数,尽量减少对表的访问行数,最小化结果集,从而减轻网络负担;能够分开的操作尽量分开处理,提高每次的响应速度;在数据窗口使用SQL时,尽量把使用的索引放在选择的首列;算法的结构尽量简单;在查询时,不要过多地使用通配符如 SELECT * FROM T1语句,要用到几列就选择几列如:SELECT COL1,COL2 FROM T1;在可能的情况下尽量限制尽量结果集行数如:SELECT TOP 300 COL1,COL2,COL3 FROM T1,因为某些情况下用户是不需要那么多的数据的。不要在应用中使用数据库游标,游标是非常有用的工具,但比使用常规的、面向集的SQL语句需要更大的开销;按照特定顺序提取数据的查找。

索引字段上进行运算会使索引失效。

尽量避免在WHERE子句中对字段进行函数或表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如: SELECT * FROM T1 WHERE F1/2=100 应改为: SELECT * FROM T1 WHERE F1=100*2

避免使用!=或<>、IS NULL或IS NOT NULL、IN ,NOT IN等这样的操作符.

因为这会使系统无法使用索引,而只能直接搜索表中的数据。例如: SELECT id FROM employee WHERE id != “B%” 优化器将无法通过索引来确定将要命中的行数,因此需要搜索该表的所有行。在in语句中能用exists语句代替的就用exists.

尽量使用数字型字段.

合理使用EXISTS,NOT EXISTS子句

能够用BETWEEN的就不要用IN

能够用DISTINCT的就不用GROUP BY

尽量不要用SELECT INTO语句。SELECT INTO 语句会导致表锁定,阻止其他用户访问该表。

3.MySQL索引优化

全值匹配

如select * from staffs where name = 'July' and age = '23' and pos = 'dev'

匹配最左列

对于复合索引来说,不总是匹配所有字段列,但是可以匹配索引中靠左的列。 如select * from staffs where name = 'July' and age = '23',key字段显示用到了索引,注意,key_len字段(表示本次语句使用的索引长度)数值比上一条小了,意思是它并未使用全部索引列,事实上只用到了name和age列

匹配列前缀

即一个索引中列的前一部分,主要用在模糊匹配,如select * fromstaffs where name like 'J%',explain信息的key字段表示使用了索引,但是mysql的B树索引不能非列前缀的模糊匹配,如select * from staffs where name like '%y' 或者 like '%u%',据说是由于底层存储引擎的API限制

匹配范围

如select * from staffs where name > 'Mary',但俺在测试时发现>可以,>=却不行,至少在字符串列上不行(测试mysql版本5.5.12),然而在时间类型(timestamp)上却可以,不测试下还真不能确定说就用到了索引==

精确匹配一列并范围匹配右侧相邻列

即前一列是固定值,后一列是范围值,它用了name与age两个列的索引(key_len推测)

  如select * from staffs where name = 'July' and age > 25

只访问索引的查询

比如staffs表的情况,索引建立在(name,age,pos)上面,前面一直是读取的全部列,如果我们用到了哪些列的索引,查询时也只查这些列的数据,就是只访问索引的查询,如 select name,age,pos from staffs where name = 'July' and age = 25 and pos = 'dev'

select name,age from staffs where name = July and age > 25

【无标题】MySQL优化相关推荐

  1. mysql输入命令1002无标题_Linux下远程连接MySQL数据库的方法

    步骤 1.在服务器端开启远程访问 首先进入mysql数据库,然后输入下面两个命令: grant all privileges on *.* to 'root'@'%' identified by 'p ...

  2. WEB程序员需要掌握的十大MySQL优化技巧

    WEB开发者不光要解决程序的效率问题,对数据库的快速访问和相应也是一个大问题.希望本文能对大家掌握MySQL优化技巧有所帮助. 1.优化你的MySQL查询缓存 在MySQL服务器上进行查询,可以启用高 ...

  3. mysql主键自增长_全面的MySQL优化面试解析

    本文概要 文章内图片有损,需要高清可以在公众号内回复"大图" 概述 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理 ...

  4. mysql字段简索引_3万字总结,Mysql优化之精髓

    本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降. ...

  5. MySQL优化/面试,看这一篇就够了

    概述 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计数据库 ...

  6. Mysql优化第一弹:彻底征服女朋友

    人世仙家本自殊,何须相见向中途.惊鸿瞥过游龙去,漫恼陈王一事无. 嗨,大家好,我是洛神,性别男.一个来自快乐星球的程序员. 欢迎大家专注我的公众号[程序员洛神],我会不定期发放福利哟~ 前言 这篇文章 ...

  7. MYSQL 优化常用方法

    1.选取最适用的字段属性  MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的性能, 我们可以将表中字段的宽度设 ...

  8. MySQL优化学习总结

    MySQL 性能优化的最佳20多条经验分享 http://www.jb51.net/article/24392.htm 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关 ...

  9. 简易mysql优化_优化 MySQL:简单三个技巧

    原标题:优化 MySQL:简单三个技巧 技巧#1:为临时表分配足够的内存 在某些情况下,服务器在处理语句时会创建内部临时表.临时表用于内部操作如GROUP BY和distinct,还有一些ORDER ...

  10. 「mysql优化专题」高可用性、负载均衡的mysql集群解决方案(12)

    不可避免的是,使用MySQL时随着时间的增长,用户量以及数据量的逐渐增加,访问量更是剧增,最终将会使MySQL达到某个瓶颈,那么MySQL的性能将会大大降低.怎么办?前面已经讲过十一篇优化方案,接下来 ...

最新文章

  1. php qcloud sdk weapp_微信小程序源码+PHP后台
  2. 利用JMeter进行压力测试(1)(转)
  3. Git报错: OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443
  4. c语言打印删除空格,新人提问:如何将输出时每行最后一个空格删除
  5. 威马汽车创始人沈晖:10万以下的不能叫智能电动汽车
  6. C语言编程时没思路,c语言编程问题
  7. tomcat7 IP限制配置
  8. 在网络中实现默认网关路由器冗余
  9. mysql 间隙锁_MySQL间隙锁问题
  10. java 解压assets文件,android 读取assets下文件或者 java读取本地文件
  11. 小球落体计算机模拟思路,使用CSS3动画模拟实现小球自由落体效果
  12. excel自动换行_Excel如何自动换行?
  13. 港科百创 | 决赛成功举办!2021香港科大商学院-国科京东方人工智能百万奖金国际创业大赛在北京圆满收官!...
  14. AI制作卷边文字效果
  15. 2019计算机考研各科目时间安排,2019考研时间安排
  16. 梦想起航商务工作PPT模板-优页文档
  17. SecureCRT鼠标快速复制粘贴
  18. 【原创】石灰水滴在汽车上自己清洗的方法
  19. 情感分析-英文电影评论
  20. 【MySQL】DDL语句详解:列类型、列约束及自增列_Unit03

热门文章

  1. Java:反射机制学习
  2. Unity -- 按钮的使用
  3. ArrayList存储自定义对象并遍历三种方式(迭代器 普通for 增强for)
  4. dos2unix命令将dos文件转换为unix格式
  5. 面试英语情景对话,求职者必看!
  6. no suitable driver found解决方法
  7. 【Java技术系列】爱情36技之猿门授渔
  8. 《Python极客项目编程 》——第2章 万花尺 2.1 参数方程
  9. 综合布线系统---常见机柜尺寸
  10. STM32f103的数电采集电路的ADC多通道采集程序