1、前缀索引
建立索引关键字一种方案。
通常会使用字段的整体作为索引关键字。
有时,使用字段前部分数据,也可以去识别某些记录。
语法:
index `索引名` (`字段`(N)); 使用字段前N个字符建立索引。
N,究竟是多少?
使用N长度所达到的辩识度,极限接近于使用全部长度的辩识度概可。
> select count(*) from student; --总记录数,比如1000000
> select 1000000/count(distinct ename) from student; --ename能够达到的最大辩识度
> select 1000000/count(distinct substring(ename, 1, 5)) from student; --测试前5个字符达到的辩识度
依次取前N个字符,进行对比,找到极限接近辩识度的长度。 > alter table student add index `i_ename` (`ename`(9));
(*前缀索引不能使用索引覆盖。) 2、全文索引
特殊:关键字的创建上。
为了解决like '%keyword%'这类查询的匹配问题。 表结构如下:
CREATE TABLE articles (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
title VARCHAR(200),
body TEXT
); INSERT INTO articles (title,body) VALUES
('MySQL Tutorial','DBMS stands for DataBase ...'),
('How To Use MySQL Well','After you went through a ...'),
('Optimizing MySQL','In this tutorial we will show ...'),
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
('MySQL vs. YourSQL','In the following database comparison ...'),
('MySQL Security','When configured properly, MySQL ...');
如果我们要查询title和body中包含 database的记录,sql语句如下: > select * from articles where title like '%database%' or body like '%database%';
这种情况无法通过创建普通索引来提高查询效率。
只能建立全文索引: > alter table articles add fulltext index `fi_tb` (`title`,`body`);
使用全文索引需要使用特殊的匹配语法: > select * from articles where match(title,body) against('database');
match() against() 返回的关键字的匹配度,(关键字与记录的关联程序) > select * from articles where match(title,body) against('in');
上述语句没有返回结果。
原因?全文索引索引的关键字,不是整个字段数据,而是从数据中提取的关键词。
而停止词是不被索引的。 (*mysql的全文索引不支持中文) 3、索引的数据结构
hash
b-tree
两种数据结构,指的是mysql存储索引所采用的数据结构。其中用户所维护的所有索引结构b-tree结构。 4、聚簇索引
在innodb存储引擎上,主索引是与数据记录存储在一起的(聚簇在一起)。 带来的问题?
innodb的其他索引,非主键索引(二级索引),
关键字对应的不再是记录的地址,而是记录的主键。
所以,查询需要二次检索,先检索到ID,在检索记录。 5、查询缓存query_cache
将select的结果,存储起来供二次使用。
开启查询缓存: > show variables like 'query_cache%';
> set global query_cache_type = 1;

> set global query_cache_size = 1024*1024*32;
注意事项:
(1)、查询缓存的存在判断是严重依赖于select语句本身,严格保证sql一致(包括大小写)。
(2)、如果查询时包括动态数据则不能缓存。
(3)、一旦开启了查询缓存,mysql会将所有可以被缓存的select语句都缓存,如果不想被缓存,
可以使用SQL_NO_CACHE来指定不缓存。 > select SQL_NO_CACHE * from student where id = 5;

mysql优化概述3的更多相关文章

  1. MySQL优化概述

    一. MySQL优化要点 MySQL优化是一门复杂的综合性技术,主要包括: 1 表的设计合理化(符合 3NF,必要时允许数据冗余) 2.1 SQL语句优化(以查询为主) 2.2 适当添加索引(主键索引 ...

  2. mysql优化概述4

    一.分区 1.分区概念 将某张表数据,分别存储到不同的区域中. 每个分区,都是独立的表,都要存储该分区的数据,索引信息. 2.创建分区 创建表并指定分区的选项 create table 表名 ( 定义 ...

  3. mysql优化概述2

    一.索引的概念 利用关键字,就是记录的部分数据(某个字段,某些字段,某个字段的一部份),建立与记录位置的对应关系,就是索引.索引的关键字一定是排序的. 二.索引的类型 mysql支持四种索引: 1.主 ...

  4. Mysql优化-概述

    摘抄并用于自查笔记 为什么要优化 一个应用吞吐量瓶颈往往出现在数据库的处理速度上. 随着应用程序的使用,数据库数据逐渐增多,数据库处理压力逐渐增大. 关系型数据库的数据是存放在磁盘上,读写速度慢(与内 ...

  5. Mysql优化概述及其压力测试工具

    衡量指标 TPS:Transactions Per Second (每秒传输的事物处理个数) ,这是指服务器每秒处理的事物数,支持事物的存储引擎如Innodb等特有的一个性能指标; QPS:Queri ...

  6. mysql优化一 之 优化内容概述及开启慢查日志的相关配置

    1-1数据库优化的目的 首先是为了避免出现页面访问错误(基本有三种) (1)由于数据库连接timeout产生的页面5XX错误 (2)由于慢查询造成页面无法加载 (3)由于阻塞造成的数据无法提交 其次: ...

  7. 深入MySQL(四):MySQL的SQL查询语句性能优化概述

    关于SQL查询语句的优化,有一些一般的优化步骤,本节就介绍一下通用的优化步骤. 一条查询语句是如何执行的 首先,我们如果要明白一条查询语句所运行的过程,这样我们才能针对过程去进行优化. 参考我之前画的 ...

  8. 0104探究MySQL优化器对索引和JOIN顺序的选择

    转自http://www.jb51.net/article/67007.htm,感谢博主 本文通过一个案例来看看MySQL优化器如何选择索引和JOIN顺序.表结构和数据准备参考本文最后部分" ...

  9. MySQL优化技巧

    目录 MySQL的特点 数据类型优化 整型类型 小数类型 字符串类型 时间类型 主键类型的选择 特殊类型的数据 索引优化 一个使用Hash值创建索引的技巧 前缀索引 多列索引 聚簇索引 覆盖索引 重复 ...

随机推荐

  1. Oracle 某字段值相同的取前几条数据

    rank() over(partition)的使用(转载)   有的时候会遇到这样的问题,我们需要查询一张表,而且要按照业务排序,比如我需要如下的结果: 地区   日期    费用  产品编号   用 ...

  2. rman备份恢复命令之switch(转)

    一 switch 命令1 switch命令用途更新数据文件名为rman下镜像拷贝时指定的数据文件名更新数据文件名为 set newname 命令指定的名字. 2 switch 命令使用前提条件rman ...

  3. Hive环境的安装部署(完美安装)(集群内或集群外都适用)(含卸载自带mysql安装指定版本)

    Hive环境的安装部署(完美安装)(集群内或集群外都适用)(含卸载自带mysql安装指定版本) Hive 安装依赖 Hadoop 的集群,它是运行在 Hadoop 的基础上. 所以在安装 Hive 之 ...

  4. 并发工具类(四)线程间的交换数据 Exchanger

    前言   JDK中为了处理线程之间的同步问题,除了提供锁机制之外,还提供了几个非常有用的并发工具类:CountDownLatch.CyclicBarrier.Semphore.Exchanger.Ph ...

  5. 20180129周一之学习PYTHON笔记【PYTHON2写个自动点击学习功能】

    pyautogui.click(pyautogui.center(pyautogui.locateOnScreen('sy.png'))) #点击该截图一次 --------------------- ...

  6. 基于Redis位图实现用户签到功能

    场景需求 适用场景如签到送积分.签到领取奖励等,大致需求如下: 签到1天送1积分,连续签到2天送2积分,3天送3积分,3天以上均送3积分等. 如果连续签到中断,则重置计数,每月初重置计数. 当月签到满 ...

  7. 文件的编辑命令-echo/cat

    touch test.yaml echo "line1 line2" >> test.yaml cat test.yaml line1 line2 # 创建test.y ...

  8. 1.vue和react的区别

    1.个人感觉Vue好用,react不咋地呀. 2.(网上搜的)Vue的解决方案适用于小型应用,但对于对于大型应用而言不太适合.

  9. idea 安装 破解方法

    参考:https://blog.csdn.net/qq_27686779/article/details/78870816 (1)下载破解补丁 把下载的破解补丁放在你的idea的安装目录下的bin的目 ...

  10. ABAP-BarCode-1-HTML二维码打印及动态屏幕实现

    很久很久...以前写的一个测试程序,主要是通过ABAP与HTML交互,编写JavaScript实现二维码及动态屏幕实现. 1.ABAP界面效果 2.实现代码 *&--------------- ...