mysql整理
1.在mysql
数据库内如何让自动增加字段从0开始truncate table 表名
2.表中有a b c三列时,用sql语句实现:当a列大于b列时选择a列,否则选择b列,当b列大于c列时选择b,否则选择c列select case when a > b then a else b end, case when b > c then b else c end;
3.redis
redis
是一个key-value
存储系统。支持五种数据类型:
(1)string
(字符串)
(2)list
(列表)
(3)hash
(hash
表)
(4)set
(集合)
(5)zset
(有序集合)
4.myisam
和innodb
的区别myisam
特点
(1)不支持事务、外键
(2)支持表级锁,不支持行级锁
(3)拥有较高的查询效率innodb
特点
(1)支持事务、外键
(2)支持行级锁,并发性更高,需要的花销也更高
如果执行大量的select
,myisam
速度更快,如果执行大量的insert
或update
,innodb
速度更快。执行select count(*) from table
时,myisam
只是简单的读出保存好的行数,而innodb
要扫描整个表来计算有多少行,如果执行select count(*) from table where...
,两种存储引擎的操作是一样的。
5.索引
索引在数据库中的作用是快速找到某个列。不使用索引的话,mysql
必须从第一条记录遍历导相关的行,索引能快速的达到某个位置取搜索数据文件。
四种索引分类:
(1)普通索引:最基本的索引,没有任何的限制
(2)唯一索引:和普通索引类似,索引值必须唯一,但允许有空值
(3)主键索引:主键,特殊的唯一索引
(4)组合索引:将多列作为索引,用于组合搜索
索引特点:
索引能让查询数据的速度上升,而使写入数据的速度下降。
索引不会包含有null值的列,所以在数据库设计的时候不要让字段的默认值为null
一般情况下不鼓励使用like操作,like "%aaa%"不会使用索引,而like "aaa%"可以使用索引
不要在列上进行运算
缺点:
(1)创建索引和维护索引需要时间成本
(2)创建索引需要占据磁盘的空间
(3)会降低表的增删改的效率
6.mysql
查询性能优化
(1)避免向数据库请求不需要的数据。避免使用select *
这种方式进行查询,应该只返回需要的列。
(2)查询数据的方式。可以通过添加合适的索引改善查询数据的方法
(3)分解大的查询。可以将一个大查询切分为多个小查询执行,比如将一个关联查询分解成多个单表查询
(4)用in()
代替or
。对于in()
的列表中有大量取值的时候,用in()
替换or
更快
(5)排序优化。应该尽量让mysql
使用索引进行排序
(6)子查询优化。尽可能用关联查询替换子查询,可以提高查询效率
(7)优化min()
和max()
。对对应字段添加索引
7.优化mysql
数据库的方法
四个层面:
(1)sql
及索引层面
(2)数据库表结构层面
(3)系统配置层面
(4)硬件配置层面
sql
及索引层面:
(1)使用mysql
慢查询日志slow_query_log.log
对有效率问题的sql
进行监控
(2)使用explain
查询sql
的执行计划
(3)count()
和max()
的优化;
(4)使用有索引的列或主键进行order by
操作
(5)使用join
来代替子查询
(6)使用联合union
来代替手动创建的临时表
如何建立合适的索引:
(1)在where
从句,group by
从句,order by
从句,on
从句中出现的列
(2)索引字段越小越好
(3)离散度大的列放在联合索引前面
数据库表结构层面:
(1)使用可以存下你的数据的最小的数据类型
(2)使用简单的数据类型,int
要比varchar
类型处理上更简单
(3)尽可能的使用not null
定义字段
(4)尽量少用text
类型