常见的几种MySQL数据优化方式分享

选取最适合的字段属性
2、尽可能的把字段设置成not null,这样在执行查询的时候,数据库不用去比较null值。
使用连接(join)来代替子查询是(sub-queries)
例:将客户基本信息表中没有任何订单的客户删除掉
利用子查询先从销售信息表中将所有发出订单的客户id取出,然后将结果传递给主查询。使用子查询可以一次性的完成很多逻辑上需要多个步骤才能完成的sql操作,同时也可以避免事务或者表锁死,并且写起来也很容易。但是,在某些情况下,子查询可以被更有效率的连接(join)替代。
select * from customerinfo where customerid not in (selectc ustomerid from salesinfo)
select * from customerinfo left join salesinfo on customerinfo.customerid = salesinfo.customerid where salesinfo.customerid isnull
swift code
连接(join)之所以更有效率一些,是因为mysql不需要在内存中创建临时表来完成这个逻辑上的需求两个步骤的查询工作。
union查询可以把需要使用临时表的两条或者更多的select查询合并成一个查询中。在客户端的查询会话结束的时候,临时表会被自动删除,从而保证数据库的整齐、高效。使用union来创建查询的时候,只需要用union作为关键字把多个select语句连接起来就可以了(所有的select语句中的字段数目相同)
select name,birthdate from author union
事务
begin; insert into salesinfo set customerid=14; update inventory set quantity=11 where item=‘book’; commit;
锁定表
lock table inventory write select quantity from inventory where item=‘book’;
update inventory set quantity=11 where item=‘book’; unlocktables
使用外键
例如,外键可以保证每一条销售记录都指向某一个存在的客户。外键可以把customerinfo表中的customerid映射到salesinfo表中的customerid,任何的一条没有合法customerid的记录都不会被更新或者插入到salesinfo中。
null,primarykey(customerid))type=innodb;
foreignkey(customerid) references customerinfo(customerid) on delete cascade)type=innodb;
使用索引
一般说来,索引应建立在那些将用于join,where判断和orderby排序的字段上。尽量不要对数据库中某个含有大量重复的值的字段建立索引。对于一个enum类型的字段来说,出现大量重复值是很有可能的情况
优化查询语句
在相同类型的字段间进行比较的操作。
例如:在一个date类型的字段上使用yeae()函数时,将会使索引不能发挥应有的作用。
select * from books where name like“mysql%”
最后,应该注意避免在查询中让mysql进行自动类型转换,因为转换过程也会使索引变得不起作用。


宝马承诺2021年前纯电动无人驾驶车上路
掌握IIoT关键趋势 将成数码转型催化剂
人体反应速度测试器电路
AI+BI模式真的有想象中的那么美好吗
BOE京东方为北京环球度假区顺利开园提供有力保障
常见的几种MySQL数据优化方式分享
台电新发售的幻影NP900C固态硬盘评测
华为智慧屏摩卡金配色即将上线,搭载4K量子点屏幕
基于符合CI的异频钥匙将两个不同频带的RFID芯片集合一体
思特威推出三款全新SmartGS-2技术的工业应用CMOS图像传感器
荣耀20青春版内置4000mAh大电池带来了全方位的体验提升
华为mate10确定10月16日上市,价格很良心,网友:还买什么iphone8
防爆露点分析仪的特点及参数
Linux中的32位与64位
如何一招提高物联网器件电池能效比
小度护耳降噪耳机Plus搭载NDT TWS压感触控解决方案
雷曼超高清大屏保障电网安全稳定运行
光耦初级加三极管有什么作用?
恒频脉宽调制细分电路
5G毫米波有什么优势和劣势?