For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
数据库开发与应用随着互联网的不断发展而被越来越多的程序员掌握,今天我们就通过案例分析来简单了解一下,MySQL数据库优化需要关注哪些问题。
mysql在创建表的时候,对每个字段选择合适的数据类型很重要!
根据个人的经验总结:
整数类型选择INT
小数类型选择DECIMAL
字符串类型选择TEXT
日期时间选择DATETIME
一般在表中我们都是以字符串类型居多,但是如果字符串类型的字段作为主键的时候,就不能用TEXT了,好选用CHAR或VARCHAR
主要原因是:
CHAR表示固定长度的字符串
VARCHAR表示的是可变长度的字符串
TEXT表示的是长度不可控,系统会根据实际长度存储这个TEXT字段,不适合建索引
各种主键的缺点:
业务字段做主键,缺点:业务字段的值可能重复
自增字段做主键,缺点:分布式的时候字段值可能重复
UUID或雪花算法做主键,缺点:长度太长
手动赋值字段做主键,缺点:操作比较麻烦
mysql的数据文件:
frm:存放表结构
myd:存放表数据
myi:存放表索引
const:通过索引一次就找到了
eq_ref:主键或索引扫描,只有一条记录匹配
ref:非索引扫描,可能有多条记录匹配
range:范围扫描
index:全索引扫描
all:全表扫描
mysql索引失效的情况七字口诀:“模型数空运快”
模:使用like进行模糊查询的时候,以百分号%开头的,索引就会失效。
型:代表数据类型,数据类型错误了,索引也会失效。
数:函数,对索引的字段使用内部函数的,索引也会失效。这种情况,应该建立基于函数的索引。
空:null,索引不存储空值,如果没有声明nounull,数据库会认为有可能存在空值,也不会按照索引进行计算。
运:运算,对索引列进行加减乘除等运算的,会造成索引失效。
:复合索引中索引列的顺序非常重要,如果不是按照索引列左列开始查找,则无法使用索引。
快:全表扫描快,如果数据库认为全表扫描更快的时候,它就不会使用索引。
不适合建索引的情况:
1,表里面的数据量太少
2,经常对表进行增删改
3,数据大量重复
聚簇索引和非聚簇索引的区别:
聚簇索引:数据和对应的索引列存储在一起,索引树的叶子节点存储的是需要查询的数据,innodb既支持聚簇索引也支持非聚簇索引。
非聚簇索引:数据和对应的索引列分开存储,索引树的叶子节点存储的是主键的值,再通过主键值查找到要查询的数据(回表),myisam只支持非聚簇索引。
覆盖索引:查询的数据只需要在索引中就能够获取到,不需要再从数据标中获取,也就是:where里面的索引列包含了select里面的列
orderby一定不能和select*一起使用,因为:
如果要查询的只有2个字段,但是select*却需要查询所有字段(10个字段),很有可能select*远远超出了sort_buffer的容量大小,就会导致创建tmp文件进行合并排序,就会导致多次IO。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。