加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码网 (https://www.900php.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL常见面试问题总结(三)

发布时间:2016-11-15 15:11:09 所属栏目:MySql教程 来源:站长网
导读:副标题#e# 061 如何删除表? 答案:运行命令 drop table table_name; 062 创建索引 对于查询占主要的应用来说,索引显得尤为重要。很多时候性能问题很简单的就是因为我们忘了添加索引而造成的,或者说没有添加更为有效的索引导致。如果不加索引的话,那么查

III.4 编码选择

单字节 latin1

多字节 utf8(汉字占3个字节,英文字母占用一个字节)如果含有中文字符的话最好都统一采用utf8类型,避免乱码的情况发生。

III.5 主键选择原则

注:这里说的主键设计主要是针对INNODB引擎

1.能唯一的表示行。

2.显式的定义一个数值类型自增字段的主键,这个字段可以仅用于做主键,不做其他用途。

3.MySQL主键应该是单列的,以便提高连接和筛选操作的效率。

4.主键字段类型尽可能小,能用SMALLINT就不用INT,能用INT就不用BIGINT。

5.尽量保证不对主键字段进行更新修改,防止主键字段发生变化,引发数据存储碎片,降低IO性能。

6.MySQL主键不应包含动态变化的数据,如时间戳、创建时间列、修改时间列等。

7.MySQL主键应当有计算机自动生成。

8.主键字段放在数据表的第一顺序。

推荐采用数值类型做主键并采用auto_increment属性让其自动增长。

III.6 其他需要注意的地方

NULL OR NOT NULL

尽可能设置每个字段为NOT NULL,除非有特殊的需求,原因如下:

1.使用含有NULL列做索引的话会占用更多的磁盘空间,因为索引NULL列需要而外的空间来保存。

2.进行比较的时候,程序会更复杂。

3.含有NULL的列比较特殊,SQL难优化,如果是一个组合索引,那么这个NULL 类型的字段会极大影响整个索引的效率。

索引

索引的优点:极大地加速了查询,减少扫描和锁定的数据行数。

索引的缺点:占用磁盘空间,减慢了数据更新速度,增加了磁盘IO。

添加索引有如下原则:

1 选择唯一性索引。

2.为经常需要排序、分组和联合操作的字段建立索引。

3.为常作为查询条件的字段建立索引。

4.限制索引的数据,索引不是越多越好。

5.尽量使用数据量少的索引,对于大字段可以考虑前缀索引。

6.删除不再使用或者很少使用的索引。

7.结合核心SQL优先考虑覆盖索引。

8.忌用字符串做主键。

反范式设计

适当的使用冗余的反范式设计,以空间换时间有的时候会很高效。

IV Mysql软件优化

开启mysql复制,实现读写分离、负载均衡,将读的负载分摊到多个从服务器上,提高服务器的处理能力。

使用推荐的GA版本,提升性能

利用分区新功能进行大数据的数据拆分

V Mysql配置优化

注意:全局参数一经设置,随服务器启动预占用资源。

key_buffer_size参数

mysql索引缓冲,如果是采用myisam的话要重点设置这个参数,根据(key_reads/key_read_requests)判断

innodb_buffer_pool_size参数

INNODB 数据、索引、日志缓冲最重要的引擎参数,根据(hit riatos和FILE I/O)判断

wait_time_out参数

线程连接的超时时间,尽量不要设置很大,推荐10s

max_connections参数

服务器允许的最大连接数,尽量不要设置太大,因为设置太大的话容易导致内存溢出

thread_concurrency参数

线程并发利用数量,(cpu+disk)*2,根据(os中显示的请求队列和tickets)判断

sort_buffer_size参数

获得更快的–ORDER BY,GROUP BY,SELECT DISTINCT,UNION DISTINCT

read_rnd_buffer_size参数

当根据键进行分类操作时获得更快的–ORDER BY

join_buffer_size参数

join连接使用全表扫描连接的缓冲大小,根据select_full_join判断

read_buffer_size参数

全表扫描时为查询预留的缓冲大小,根据select_scan判断

tmp_table_size参数

临时内存表的设置,如果超过设置就会转化成磁盘表,根据参数(created_tmp_disk_tables)判断

innodb_log_file_size参数(默认5M)

记录INNODB引擎的redo log文件,设置较大的值意味着较长的恢复时间。

innodb_flush_method参数(默认fdatasync)

Linux系统可以使用O_DIRECT处理数据文件,避免OS级别的cache,O_DIRECT模式提高数据文件和日志文件的IO提交性能

innodb_flush_log_at_trx_commit(默认1)

1.0表示每秒进行一次log写入cache,并flush log到磁盘。

2.1表示在每次事务提交后执行log写入cache,并flush log到磁盘。

3.2表示在每次事务提交后,执行log数据写入到cache,每秒执行一次flush log到磁盘。

(编辑:源码网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读