索引

索引种类

普通索引:仅加速查询

唯一索引:加速查询+列值唯一(可以有null)

主键索引:加速查询+列值唯一+表中只有一个(不可以有null)

组合索引:多列值组成一个索引,注明用于组合所有,其效率大于索引合并(向左合并,如果根据右边还是全表查询)

全文索引:对文本的内容进行分词,进行搜索

相关命令:

查看表结构 desc 表名

查看生成表的sql语句: show create table 表名

查看索引: show index from 表名

查看执行时间 set profiling=1;SQL。。 show profiles;

explan 查询表,可以查看通过索引还是全表查询的,all 代表全表,ref 代表普通索引

知识点:

如果没有索引时,limit 1 只查找第一个出现的

select * from tb1 limit 1;

like ‘*xx’或%,即使创建索引也不会走索引

函数:

select count(1) from tb1 where reverse(name)='wuper-0' //reverse(name)字段函数也不会走索引

select count(1) from tb1 where name=reverse('wuper-0') //reverse(name)对值进行反转函数会走索引

or :

select  * from where name=‘a’ or email=‘w’ 两个都建索引时会走索引,如果只有一个建不会走索引

类型不一致:

select * from tb1 where  name='alex'  name 为varchar类型 走索引 name=999类型不一致不会走索引

 !=:不会走索引,如果是主键!=也会走索引

>:不会走索引  数字或主键仍会走索引

between and in  <:都会走索引

order by :

select email from tb1 order by name desc  ,前后不一样不会走索引

组合索引最左前缀(name,email):

name和email 走索引

name走索引

email 不走索引

覆盖索引:如果在索引表可以查到所有数据则不会走数据表

索引合并:(两个单列索引合并)

a and b建组合索引的效率比两个单列索引效率高

6.注意项:

避免使用select *

count(1)或count(列) 代替count(*)

创建表尽量用char 代替varchar

表的字段顺序固定长度优先

组合所以代替单列索引(经常使用多条件)

尽量使用短索引

使用连接JOIN来代替子查询Sub-Queries

连表时注意调节类型需一致

索引散列值(重复少)不适合建索引,例,性别不适合

 

7.执行计划

explain +查询sql语句

主要看type和rows ,type可以看出是否走索引,all是没有走索引

id是是看出来执行机构sql

type:all<index<range<index_merge<ref_or_null

range:<,>范围操作

index_merge:索引合并

key:真实用的索引

rows:预估扫描多少行

9.慢日志查询  my-defult.ini配置文件【mysqld】写

slow_query_log=OFF  //是否开启慢日志记录

long_query_time=2 //时间限制,超过此时间,则记录

slow_query_log_file=/usr/slow.log  日志文件

log_queries_not_using_indexes=OFF 为使用索引的搜索是否记录

show global variables 查询全局变量

设置全局变量的值 set global slow_query_log=ON;

 

posted @ 2019-03-17 18:16  期待me  阅读(66)  评论(0)    收藏  举报