手记

MySQL基础考点1

1.VARCHAR与CHAR的区别?

    VARCHAR长度,如果存储内容超出指定长度,会被截断。

    CHAR是定长的,根据定义的字符串长度分配足够的空间。

    CHAR会根据需要采用空格进行填充以方便比较

    CHAR适合存储很短的字符串,或者所有值都接近同一个长度

    CHAR的长度,超出设定的长度,会被截断。

    对于经常变更的数据,CHAR比VARCHAR更好,CHAR不容易产生碎片

    对于非常短的列,CHAR比VARCHAR在存储空间上更有效率

2.int(0)、char(16)、varchar(16)、datetime、text的意义?

    整形宽度为0位,定长16,可变长16,时间日期,字符串类型大文本

3.数据表引擎:InooDB与MyISAM的区别?

InooDB:

    事务型引擎,性能好

    数据存储在共享表空间,可以通过配置打开

    对主键查询的性能高于其他类型的存储引擎。

    从磁盘读取数据时自动在内存构建hash索引,插入数据时自动构建插入缓冲区

    通过一些机制和工具支持真正的热备份

    支持崩溃后的安全恢复

    支持行级锁

    支持外键

MyISAM:

    拥有全文索引、压缩、空间函数

    不支持事务和行级锁,不支持崩溃后的安全恢复。表锁

    表存储在两个文件,MYD和MYI

4.锁机制?

    当多个查询同一时刻进行数据修改时,就会产生并发控制的问题。

    共享锁和排他锁,其实就读锁和写锁。

    读锁:共享的,不堵塞,多个用户可以同时读一个资源,互不干扰。

    写锁:排他的,一个写锁会阻塞其他的写锁和读锁,这样可以只允许一个人进行写入,防止其他用户读取正在写入的资源。

    锁粒度:表锁,系统性能开销最小,会锁定整张表,MyISAM使用表锁。行锁,最大程度地支持并发处理,但是也带来了最大的锁开销,InnoDB实现行级锁。

5.事务处理

    服务器层不管理事务,由下层的引擎实现,所以同一个事务中,使用多种存储引擎不靠谱。

    在非事务的表上执行事务操作Mysqlb不会发出提醒,也不会报错。

6.存储过程

    为以后的使用而保存的一条或多条mysql语句的集合

    存储过程就是有业务逻辑和流程的集合

    可以在存储过程中创建表,更新数据,删除等。

    使用场景:

        通过把处理封装在容易使用的单元中,简化复杂的操作。

        保证数据的一致性。

        简化对变动的管理

7.触发器

    提供给程序员和数据分析员来保证数据完整性的一种方法,他是与表事件相关的特殊的存储过程。

    使用场景:

    可通过数据库中的相关表实现级联更改。

    实时监控某张表中的某个字段的更改而需要做出相应的处理。

    某些业务编号的生成等。

    滥用会造成数据库及应用程序的维护困难。

8.MySQL创建高性能的索引

    真题:简单描述MySQL中,索引,主键,唯一索引,联合索引的区别,对数据库的性能有什么影响?

索引基础:

    类似于书籍目录,要想找到一本书的某个特定的主题,需要先找到书的目录,定位对应的页码。

    存储引擎使用类似的方式进行数据查询,先去索引当中找到对应的值,然后根据匹配的索引找到对应的数据行。

对性能的影响:

    大大减少了服务器需要扫描的数据量、帮助服务器避免排序和临时表、将随机I/O变成顺序I/O、大大提高查询速度,降低写的速度、占用磁盘

使用场景:

    对于非常小的表,大部分情况下全表扫描效率会更高。

    中大型表,索引非常有效。

    特大型的表,建立和使用索引的代价将随之增长,可以使用分区技术来解决。

索引类型 :

    普通索引:没有约束限制

    唯一索引:唯一性约束

    主键索引:

    组合索引:将多个列组合在一起创建索引,可以覆盖多个列

    外键索引:只有InnoDB类型的表才可以使用外键索引,保证数据的一致性、完整性和实现级联操作。

    全文索引:MySQL自带的全文索引只能用于MyISAM,并且只能对英文进行全文检索。

    唯一跟主键的区别:一个表只能有一个主键索引,可以有多个唯一索引。

    主键索引一定是唯一索引,唯一索引不是主键索引

    主键可以与外键构成参照完整性约束,防止数据不一致。

创建原则:

    1.最适合索引的列是出现在WHERE子句中的列,或连接子句中的列而不是出现在SELECT关键字后的列。

    2.索引列的基数越大,索引的效果越好。

    3.对字符串进行索引,应该制定一个前缀长度,可以节省大量的索引空间。

    4.根据情况创建复合索引,复合索引可以提高查询效率。

    5.避免创建过多索引,索引会额外占用磁盘空间,降低写操作效率。

    6.主键尽可能选择较短的数据类型,可以有效减少索引的磁盘占用提高查询效率。

注意事项:

    1.复合索引遵循前缀原则

    KEY(a,b,c)

    WHERE a = 1 and b = 2 and c = 3;

    WHERE a = 1 and b = 2;

    WHERE a = 1;

    都可以生效。得按照顺序才生效。

    2.like查询,%不能在前,可以使用全文索引

    WHERE name like '%wang%';这样的话索引就会失效

    3.column is null可以使用索引

    4.如果MySQL估计使用索引比全表扫描更慢,会放弃使用索引

    5.如果or前的条件中的列有索引,后面的没有,索引都不会被用到

    6.列类型是字符串,查询时一定要给值加引号,否则索引失效

2人推荐
随时随地看视频
慕课网APP