设计数据库及数据库的语句优化(mysql)
2017-03-16 17:08
302 查看
如何更好的写数据库?如何数据库语句优化?
如下我给大家简单介绍一下~~
----------------------
在数据库表设计方面:
在设计数据库的时候我们总要设计一些冗余字段~~为啥呢?
我自己猜的~~
有一些查询,冗余字段可以帮助我们不需要去联多表查询~~
于是乎你就可以做一些冗余字段了 ~~ 比如说评论数量
虽然说评论数量是可以从评论表里算出来的(在评论时做个触发器也不错,少查询一个表)
~~~
设置删除状态字段:
尽量少用delete语句~~这个语句在操作的时候会锁表~~以后直接用update
况且如果使用这个语句也会对数据产生一些问题~~还是不要删了
~~~~~~~
字段上面最好不要用null做默认值~~
~~~~~
做合理的索引~大量的索引只会似的插入数据缓慢
~~~~
类型字段建议采用tinyint
字符类型如下解释
varchar内存占用率小
char效率高(固定大小的字符串最好用这个存)
主键大部分都喜欢用 int~~估计大家都没有过 无符号的int(因为主键是非负数~~用这个的话主键量可以达到2倍~~~23333333)
~~~~
mysql和redis结合:
举个栗子:
比如说点赞~~~这个是个频繁的操作~~频繁的有好多点赞狂~~2333333
把在redis中存储点赞信息:
返回json时再和文章数据做整合~~效率提高数倍
~~~~
尝试对一些经常不动的数据进行缓存处理~~
----------------------
在数据库语句方面:
在使用select语句的时候尽量多些字段,如果用*的话效率好低地说
查询数量的时候 尽量使用 count(1)这种样子
查询一条语句的时候最好在后面加上 limit 1 这样的话数据库查询到一条的话就停止了
~~~~~~
如何进行快速插入呢?
insert into user(name) values(‘m’);
insert into user(name) values(‘n’);
拼接成如下语句
insert into user(name) values(‘m’), (‘n’);
效率会翻好几倍
~~~~~~~
如果能用inner join尽量使用~~这个效率最高
--------如下是看别人的博客里的-------
在查询的时候尽量不要用到 null判断 这样会导致数据库不用索引~去全表扫描~~效率很低~~
应尽量避免在 where 子句中使用 != 或 <> 操作符,否则将引擎放弃使用索引而进行全表扫描~~~
应尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描~~~
select id from t where num=10 or Name = 'admin'
可以这样查询:
select id from t where num = 10 union all select id from t where Name = 'admin'
in 和 not in 也要慎用,否则会导致全表扫描,如:
select id from t where num in(1,2,3)
对于连续的数值,能用 between 就不要用 in 了:
select id from t where num between 1 and 3
很多时候用 exists 代替 in 是一个好的选择:
select num from a where num in(select num from b)
用下面的语句替换:
select num from a where exists(select 1 from b where num=a.num)
下面的查询也将导致全表扫描:
select id from t where name like ‘%abc%’
作者: 中华edw
链接:http://www.imooc.com/article/4967
来源:慕课网
如下我给大家简单介绍一下~~
----------------------
在数据库表设计方面:
在设计数据库的时候我们总要设计一些冗余字段~~为啥呢?
我自己猜的~~
有一些查询,冗余字段可以帮助我们不需要去联多表查询~~
于是乎你就可以做一些冗余字段了 ~~ 比如说评论数量
虽然说评论数量是可以从评论表里算出来的(在评论时做个触发器也不错,少查询一个表)
~~~
设置删除状态字段:
尽量少用delete语句~~这个语句在操作的时候会锁表~~以后直接用update
况且如果使用这个语句也会对数据产生一些问题~~还是不要删了
~~~~~~~
字段上面最好不要用null做默认值~~
~~~~~
做合理的索引~大量的索引只会似的插入数据缓慢
~~~~
类型字段建议采用tinyint
字符类型如下解释
varchar内存占用率小
char效率高(固定大小的字符串最好用这个存)
主键大部分都喜欢用 int~~估计大家都没有过 无符号的int(因为主键是非负数~~用这个的话主键量可以达到2倍~~~23333333)
~~~~
mysql和redis结合:
举个栗子:
比如说点赞~~~这个是个频繁的操作~~频繁的有好多点赞狂~~2333333
把在redis中存储点赞信息:
返回json时再和文章数据做整合~~效率提高数倍
~~~~
尝试对一些经常不动的数据进行缓存处理~~
----------------------
在数据库语句方面:
在使用select语句的时候尽量多些字段,如果用*的话效率好低地说
查询数量的时候 尽量使用 count(1)这种样子
查询一条语句的时候最好在后面加上 limit 1 这样的话数据库查询到一条的话就停止了
~~~~~~
如何进行快速插入呢?
insert into user(name) values(‘m’);
insert into user(name) values(‘n’);
拼接成如下语句
insert into user(name) values(‘m’), (‘n’);
效率会翻好几倍
~~~~~~~
如果能用inner join尽量使用~~这个效率最高
--------如下是看别人的博客里的-------
在查询的时候尽量不要用到 null判断 这样会导致数据库不用索引~去全表扫描~~效率很低~~
应尽量避免在 where 子句中使用 != 或 <> 操作符,否则将引擎放弃使用索引而进行全表扫描~~~
应尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描~~~
select id from t where num=10 or Name = 'admin'
可以这样查询:
select id from t where num = 10 union all select id from t where Name = 'admin'
in 和 not in 也要慎用,否则会导致全表扫描,如:
select id from t where num in(1,2,3)
对于连续的数值,能用 between 就不要用 in 了:
select id from t where num between 1 and 3
很多时候用 exists 代替 in 是一个好的选择:
select num from a where num in(select num from b)
用下面的语句替换:
select num from a where exists(select 1 from b where num=a.num)
下面的查询也将导致全表扫描:
select id from t where name like ‘%abc%’
作者: 中华edw
链接:http://www.imooc.com/article/4967
来源:慕课网
相关文章推荐
- 更好的设计数据库还有就是数据库语句优化~~(主要是mysql)
- mysql处理上百万条的数据库如何优化语句来提高处理查询效率
- MySQL 数据库设计 笔记与总结(4)维护优化
- mysql的优化(表的设计,优化步骤,四种索引,分析慢查询,使用索引的深入解析,存储引擎分析,表的分割,数据库配置)
- Mysql优化2-数据库表设计
- 数据库设计与查询语句的优化
- Mysql性能优化----SQL语句优化、索引优化、数据库结构优化、系统配置优化、服务器硬件优化
- 表设计优化(MySQL作为报表数据库)
- mysql优化之一(数据库设计)
- 大数据量查询优化——数据库设计、SQL语句、JAVA编码
- MySQL优化1:数据库设计优化
- Mysql优化方案二之数据库类型选择及Sql语句优化
- 30多条mysql语句级优化方法,千万级数据库记录查询轻松解决
- Java中的面试题 [5] --- 数据库知识、MySQL、Oracle、sql调优、sql语句设计等
- 如何设计高效合理的MySQL查询语句(建立数据库索引的基本原则)
- mysql_数据库设计类型选择及优化
- MySQL优化技巧之四(数据库设计中的一些技巧)
- Mysql性能优化-数据库设计
- 大数据量查询优化——数据库设计、SQL语句、JAVA编码
- 大数据量查询优化——数据库设计、SQL语句、JAVA编码