数据类型

简单原则:更小更好,简单就好,避免NULL

1)整型如int(10)括号中的值与存储大小无关

2)实数decimal比float与double占用更大存储空间且CPU不能直接对decimal进行计算

3)字符串列最大长度<=255varchar使用一字节保存长度,否则使用2字节。char(10)括号中是字符数,而不是字节数(字节数与列字符集相关)。

4)使用MYSQL的内建类型保存日期与时间,如datetime、timestamp

索引类型

在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。

1) B-Tree索引

MyISAM、InnoDB使用B+Tree作为索引结构

MyISAM与InnoDB在实现上有所不同:MyISAM的主键与普通索引使用的结构一致,叶子节点保存了指向数据记录的地址。

InnoDB的主键采用聚集索引的方式(叶子节点

保存完整的行数据),而普通索引则与MyISAM

相似,但是叶子节点保存的是主键的值。

NDB Cluster内部实际使用T-Tree结构实现索引

MYSQL中能使用B-Tree索引的查询类型:

create table people (

last_name varchar(50) not null,

first_name varchar(50) not null,

dob date not null,

gender enum(‘m’,'f’) not null,

key (last_name,first_name,don)

) engine=myisam;

1. 匹配全名

where last_nam=’a’ and first_name=’b’ and dob=’1990-01-01′

2. 匹配最左前缀

where last_name=’a’ 或 where last_name=’a’ and first_name=’b’

3. 匹配列前缀

where last_name like ‘a%’

4. 匹配范围值

where last_name >= ‘a’ and last_name<=’d’

5.精确匹配一部分并且匹配某个范围中另一部分

where last_name=’a’ and first_name like ‘k%’

6. 只访问索引的查询

B-Tree支持只访问索引的查询,不访问数据行(覆盖

索引)

select first_name from people where last_name=’a’

MYSQL中B-Tree索引的一些局限:

1. 查询不是最左前缀开始不能使用索引

where first_name=’a'或where last_name like ‘%a’

2. 不能跳过索引中的列

where last_name=’a’ and dob=’1990-01-01′将只会所使用索引的第一列

3. 第一个范围条件右边的列不能使用索引

where last_name=’a’ and first_name like ‘a%’ and dob=’1990-01-01′ 因为like是范围查询,所以只会使用索引的前两列

2) Hash索引

Hash索引是建立在hash表基础上的,只对使用了索

引中每一列的精确查询有用(Memory和NDB支持,

InnoBD支持自适应hash索引)

Hash查询很快,但有些局限:

1. 索引中只保存hash码与行指针,不能覆盖索引

2. 不能使用hash索引排序

3. 不支持部分索引列匹配

4. 只支持’=',’IN’,'<=>’相等比较查询,范围查询不能使用Hash索引

5.如果hash算法的碰撞率很高会影响索引性能

6. 碰撞率很高的Hash索引删除行代价很高

查询优化

1. 隔离列

隔离列意味着条件中的列不是表达式也不位于函数中

2. 前缀索引和索引选择性

索引选择性=不重复索引值/表中所有行,越大越好

前缀索引:对于char、varchar、blob、text类型可以

索引开始的几个字符,通过索引选择性确定索引几个

字符

KEY `bc` (`b`,`c`(5))

KEY `cd` (`c`(5),`d`(5))

3. 为排序使用索引

order by子句的顺序与索引中列顺序完全一致,并且所有列排序方向一样才可以使用索引排序。如果联接多表,只有order by子句中所有列引用的是第一个表才可以(查询优化器重写查询后)。

order by子句也要遵循索引最左前缀原则(前导列在where中精确匹配除外)。

例:

key t1 (day,in_id,con_id) 如下查询可以使用索引(explain的Extra中不会看到using filesort)

4. group by使用索引

group by 使用索引规则与order by一致。

group by 默认会进行排序操作,如果不关心返回顺序可以加上order by null来跳过排序。

distinct fd 如果fd列有索引,且where子句中使用了该索引,则也可以使用索引优化distinct

5. 优化min、max

select min(fd2) from tt1 where m=’2012-03-29′;

select fd2 from tt1 force index (fd2) where

m=’2012-03-29′ order by fd2 limit 1;

select max(fd2) from tt1 where m=’2012-03-29′;

select fd2 from tt1 force index (fd2) where

m=’2012-03-29′ order by fd2 desc limit 1;

6. 使用explain分析查询

只能对SELECT查询执行EXPLAIN分析。可以加

EXTENED关键字,然后使用show warnings查看查

询优化器重写后的SQL,如果对分区表可以加

PARTITIONS关键字。如:

EXPLAIN EXTENED SELECT …

mysql 查询优化实验报告_Mysql查询优化小结相关推荐

  1. mysql安全性实验心得_mysql安全小结

    sql的注入是一个很困扰人的问题,一些恶意攻击者可以利用sql注入来获取甚至是修改数据库中的信息,尤其是一些比较敏感的密码一类的数据. sql注入主要利用mysql 的注释将后续应正常执行的语句注释掉 ...

  2. mysql实训报告_mysql数据库技术》实验报告.doc

    mysql数据库技术>实验报告 MySQL数据库技术实验报告 系 别 班 级 学 号 姓 名 地点 地点机房 课程名称 MySQL数据库技术 实验名称 实验1 MySQL的使用 实 验 过 程 ...

  3. mysql完整性语言实验报告_MySQL实验报告.doc

    MySQL实验报告 信 息 科 学 与 技 术 系 实 验 报 告 实验五 索引和数据完整性 [目的与要求] 掌握索引的使用方法. 掌握数据完整性的实现方法. [实验准备] 了解索引的作用与分类. 掌 ...

  4. mysql数据库实验报告一

    实验报告一 前言 实验操作指导 解决方法 实验目的 实验内容及操作步骤 实验遇到的问题及体会 前言 <数据库原理I>实验指导书 实验课程性质:非独立开课 开课学期:第4学期 适用专业:计算 ...

  5. mysql备份与恢复实验报告_实验十一 MySQLl备份与恢复1

    实验十一MySQL备份与恢复 一.实验内容: 1. 使用SQL语句导入和导出表数据 2. 使用客户端工具备份还原数据库 3. 使用日志文件恢复数据库 二.实验项目:学生成绩数据库 创建用于学生成绩管理 ...

  6. mysql数据库实验查询_MySQL数据库表数据的查询操作实验

    实验3.MySQL数据库表数据的查询操作实验(1) 一.实验目的 掌握SELECT 语句的基本语法格式. 掌握SELECT 语句的执行方法. 掌握SELECT 语句的 GROUP BY 和 ORDER ...

  7. mysql备份与恢复实验报告_实验报告六MYSQL备份和恢复.doc

    实验报告六MYSQL备份和恢复.doc 班级:10应用 姓名:张红珍 学号:2010081133 指导老师:钟老师 实验六 MYSQL备份与恢复 实验平台:安装MYSQL数据库的PC 实验目的:1.熟 ...

  8. MySQL查询实验报告_实验报告数据库的基本查询'

    <实验报告数据库的基本查询'>由会员分享,可在线阅读,更多相关<实验报告数据库的基本查询'(5页珍藏版)>请在人人文库网上搜索. 1.一.实验目的:通过该实验掌握应用SQL 查 ...

  9. mysql上机实验报告_数据库上机实验7实验报告.doc

    <数据库上机实验7实验报告.doc>由会员分享,提供在线免费全文阅读可下载,此文档格式为doc,更多相关<数据库上机实验7实验报告.doc>文档请在天天文库搜索. 1. 上机 ...

最新文章

  1. c++读取文本文件里的指定位置的字符_利用FSO对象向文本文件中写入信息
  2. 【企业管理】人力资源-华为实践
  3. html5media使用
  4. 新建Acquisition contract出错的问题
  5. Java描述设计模式(22):策略模式
  6. JSLint JavaScript代码质量审查工具汉化中文版隆重发布
  7. 微信小程序 环形进度条_微信小程序:实时圆形进度条实现
  8. vue cli 解决跨域 线上 nginx 反向代理配置
  9. HTML5块元素标签的使用
  10. 微信公众号插入公式介绍
  11. 机器视觉检测技术之颜色视觉工具应用
  12. python核心技术与实战,Python核心技术与实战——十五|深入了解迭代器和生成器...
  13. 第十六届全国大学生智能车竞赛线上比赛监督裁判培训演练
  14. 一个男朋友写给女朋友的信!爆笑(真勇敢)
  15. 在 csproj 文件中使用系统环境变量的值(示例将 dll 生成到 AppData 目录下)
  16. 自动化测试之单元测试框架
  17. Windows 7 C 盘隐藏文件分析 删除
  18. [lua] 用lua实现扑克游戏发牌的逻辑代码
  19. 基于Tensorflow框架的BP神经网络回归小案例--预测跳高
  20. PHP高级开发技巧与范例,PHP高级开发技巧与范例(PDG)

热门文章

  1. PHP面试中常见的字符串与文件操作题目
  2. maven搭建ssm框架
  3. iOS - Swift NSValue 值
  4. MySQL 过滤规则-误解处理
  5. Redis中Value使用hash类型的效率是普通String的两倍
  6. 宝塔建站 mysql在哪_宝塔面板建站教程,越详细越好纯小白! - 搜外问答
  7. 分析手机网站的优势思维结构图_写了100多篇原创文章,我常用的在线工具网站推荐给大家...
  8. php gridview,GridView - [ Android中文手册 ] - 在线原生手册 - php中文网
  9. 如何删除oracle用户数据库用户,oracle删除指定用户的原数据库,建立该用户的新数据库...
  10. 企业为什么要开通银企直联_企业为什么要把人事外包出去