mysql优化
来源:互联网 发布:seo标题是什么意思 编辑:程序博客网 时间:2024/06/06 04:13
一、mysql数据库设计,字段类型设置不好会给数据库增加了不必要的空间,字段类型介绍如下:
1、bigint
从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字),无符号的范围是0到
18446744073709551615。一位为 8 个字节。取值范围:-9223372036854775808 - 9223372036854775807
2、int
一个正常大小整数。有符号的范围是-2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字),无符号的范围是0到4294967295。一位大小为4 个字节。取值范围:-2147483648 - 2147483647
int 的 SQL-92 同义词为 integer。
3、mediumint
一个中等大小整数,有符号的范围是-8388608到8388607,无符号的范围是0到16777215。 一位大小为3个字节。取值范围:-8388608 - 8388607
4、smallint
一个小整数。有符号的范围是-2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型数据,无符号的范围是0到65535。一位大小为 2 个字节。MySQL提供的功能已经绰绰有余,而且由于MySQL是开放源码软件,因此可以大大降低总体拥有成本。取值范围:-32768 - 32767
5、tinyint
有符号的范围是-128 - 127,无符号的范围是 从 0 到 255 的整型数据。一位大小为1 字节。取值范围:-128 - 127
例如:
在定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库增加了不必要的空间,甚至使用VARCHAR这种类型也是多余的。因为只要采用CHAR(6)就可以做到。
二、使用连接(JOIN)来代替子查询(Sub-Queries) --->( 不需要在内存中创建临时表)
(1)left join
(2)right join
(3)inner join
(4)full join
例如:
情景:一个订单中有个分多个订单详情(订单拆分),一个人帮多个下订单
select count(id) from ordersInfo where orderId =(select orderId from orderInfo where id ='372');
等价select count(t.id) from ordersInfo inner join orderInfo a on a.orderId = t.orderId where a.id ='372';
三、3、使用联合(UNION)来代替手动创建的临时表
四、采用事物----->保持数据库中数据的一致性和完整性
例如:
BEGIN;
INSERT INTO user SET userName='davis';
UPDATE orders SET status='待评价' where id='345';
COMMIT;
(1)事务的另一个重要作用是当多个用户同时使用相同数据库时,可以利用锁定数据库的方法来为用户提供一种安全的访问方式,这样可以保证用户的操作不被其它的用户所干扰
(2)但是事物也有个缺点,事物具有独占性,这样有时就会影响数据库的性能,特别是一些比较大的应用系统,因为这样可能会产生非常严重的延迟效果。
五、合理采用外键
六、使用索引---->(相同类型的字段间进行比较的操作)
索引是提高数据库性能的常用方法,它可以令数据库服务器以比没有索引快得多的速度检索特定的行,尤其是在查询语句当中包含有MAX(), MIN()和ORDERBY这些命令的时候,性能提高更为明显。
注:索引应建立在那些将用于JOIN, WHERE判断和ORDER BY排序的字段上。尽量不要对数据库中某个含有大量重复的值的字段建立索引
七、优化查询sql
(1) 利用LIMIT 1取得唯一行,有效防止全表扫
(2) 不要使用BY RAND()命令
(3) 尽量避免SELECT *命令--->从表中读取越多的数据,查询会变得更慢。他增加了磁盘需要操作的时间
(4)in 和 not in 也要慎用,否则会导致全表扫描
(5) 应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描
(6) 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描
(7) 应尽量避免在 where 子句中使用!=或$amp;
(8) 模糊查询将导致全表扫描: select id from user where userName like '%davis%';若要提高效率,可以考虑全文检索。
(9) 如果在 where 子句中使用参数,也会导致全表扫描 例如:select userName from user where id =@userId;
可以改为强制查询使用索引: selectuserName from user with(index(索引名)) where id=@userId;
(10) 应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。
(11) 应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描
(12) 尽可能的使用 varchar/nvarchar 代替 char/nchar ,因为首先变长字段存储空间小,可以节省存储空间
(13) 避免频繁创建和删除临时表,以减少系统表资源的消耗
- 优化Mysql
- mysql优化
- mysql优化
- mysql优化
- MySQL 优化
- MySQL优化
- mysql 优化
- mysql 优化
- Mysql优化
- 优化Mysql
- 优化Mysql
- 优化MYSQL
- mysql 优化
- mysql 优化
- mysql优化
- mysql优化
- MySql优化
- MySQL优化
- mysql与db2中的varchar(n)
- HTML5常用标签
- 数据库主从架构
- 机器学习算法--方向传播算法(BP法)
- HDU 1575 Tr A(矩阵快速幂)
- mysql优化
- RSA/DES/Hash/MD5,数字签名,证书和认证(安全)-国际、国密
- MainUsbActivity.java
- Python入门:请重新输入并获取最新的一次输入的内容
- 欢迎使用CSDN-markdown编辑器
- C# 导出Oracle 表结构 工具
- 自定义遮盖层,帮你完成简单的操作引导
- pageContext对象的用法详述
- andSelf()使用