面试中遇到问MySQL的问题

发布时间2022-12-24 14:14:13MySql2人已围观

简介 简单介绍Mysql索引,Mysql如何创建权限管理表,以及MySql如何优化

MySql有哪些索引

 1.普通索引
 2.唯一索引
 3.主键索引
 4.组合索引(联合索引)
 5.全文索引


MySql数据表查询时什么时候索引会失效

1.对于创建的多列索引(复合索引),不是使用的第一部分就不会使用索引
	alter table 表名称 add index my_index(name, age)	//name左边的列,age右边的列
	select * from 表名称 where name = 'aaa'	//会用到索引
	select * from 表名称 where age = 18	//不会使用索引
2.对于使用 like 查询, 查询如果是 "%aaa" 不会使用索引,而 "aaa%" 会使用到索引。
	select * from student where name like 'aaa%'	//会用到索引
	select * from student where name like '%aaa'	//不会使用索引
3.如果条件中有or,有条件没有使用索引,即使其中有条件带索引也不会使用;所以尽量使用in,这个是会使用索引的。
4.如果列类型是字符串,那么一定要在条件中使用引号引用起来,否则不使用索引。
	select * from  table where name='zhangsan';  //使用索引
	select * from  table where name= zhangsan;   //没有使用索引
5.如果mysql认为全表扫面要比使用索引快,则不使用索引。


MySql主键索引和唯一索引的区别

1.主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。
2.主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键。
3.唯一性索引列允许空值,而主键列不允许为空值。
4.主键列在创建时,已经默认为空值 + 唯一索引了。
5.主键可以被其他表引用为外键,而唯一索引不能。
6.一个表最多只能创建一个主键,但可以创建多个唯一索引。
7.主键更适合那些不容易更改的唯一标识,如自动递增列、身份证号等。
8.在RBO模式下,主键的执行计划优先级要高于唯一索引。 两者可以提高查询的速度。


Innodb和Myisam的区别

1.innodb支持事务,而myisam不支持事务。
2.innodb支持外键,而myisam不支持外键。
3.innodb是行锁,而myisam是表锁(每次更新增加删除都会锁住表)。
4.innodb和myisam索引都是基于b+树,但具体实现不一样,innodb的b+树的叶子节点是存放数据的,myisam的b+树的叶子节点是存放指针的。
5.innodb是聚簇索引,必须要有主键,一定会基于主键查询,但是辅助索引就会查询两次,myisam是非聚簇索引,索引和数据是分离的,索引里保存的是数据地址的指针,主键索引和辅助索引是分开的。
6.innodb不存储表的行数,所以select count( * )的时候会全表查询,而myisam会存放表的行数,select count(*)的时候会查的很快。
总结:mysql默认使用innodb,如果要用事务和外键就使用innodb,如果这张表只用来查询,可以用myisam。如果更新删除增加频繁就使用innodb。


MySql如何优化

SQL语句的优化:
1、尽量避免使用子查询
2、避免函数索引
3、用IN来替换OR
4、LIKE前缀%号、双百分号、_下划线查询非索引列或*无法使用到索引,如果查询的是索引列则可以
5、读取适当的记录LIMIT M,N,而不要读多余的记录
6、避免数据类型不一致
7、分组统计可以禁止排序sort,总和查询可以禁止排重用union all
8、避免随机取记录
9、禁止不必要的ORDER BY排序
10、批量INSERT插入
11、不要使用NOT等负向查询条件
12、尽量不用select *
13、区分in和exists

索引的优化:
1、Join语句的优化
2、避免索引失效


赞一个! (1)

文章评论