MySQL查询优化的5种实用技术
本文总结并分析了mysql查询优化的技巧:熟悉SQL语句的人知道,如果要操作一个任务,编写SQL语句的方法有很多种,但是不同编写查询的性能可能会截然不同。
本文列举了五种mysql查询优化方法,当然,优化方法还是很多的。
1。优化的数据类型
MySQL中有很多类型的数据,如果你是一个DBA,是按照优化原则对数据类型进行严格的检查,但是开发人员可能会决定他们认为最简单的解决方案,为了加快编码速度,或者选择最明显的选择,因此,您可能面临的不是最佳选择。如果可能的话,你应该按照共同的标准改变决定。
(1)避免使用null
NULL需要对大多数数据库进行特殊处理,而MySQL也不例外,它需要更多的代码、更多的测试和特殊的索引逻辑,有些开发人员没有意识到,当您创建一个表null是默认值时,但大多数时候,您应该使用非null,或者使用一个特殊值,如0。- 1作为默认值。
(2)只能使用较小的字段。
MySQL读取数据从磁盘存储在存储器中,然后看它使用的CPU周期和我/ O盘,这意味着一个较小的数据类型所占用的空间小,磁盘读取或封装在记忆效率更好,但不应过于刚性降低的数据类型,如果应用程序是什么变化后是没有空间,修正表需要重构,从而间接导致代码中的变化,这是一个令人头痛的问题,所以你需要找到一个平衡点。
2。小心字符集转换
客户机或应用程序使用的字符集可能与表本身中的字符集不同,这需要MySQL在运行过程中进行隐式转换。此外,有必要确定字符集如UTF-8支持多字节字符,所以他们需要更多的存储空间。
三.优化计数(my_col)和数量(*)
如果你使用MyISAM表,使用计数没有WHERE子句(*)的速度是非常快的,因为数据量是非常精确的,因此MySQL不是一条线走,然后去旅行的数量,如my_col列没有空值,然后说情况会。即算(my_col)速度很快。
如果使用WHERE子句,计数()不能被优化更多。它超出了WHERE子句中明显的索引列。对于复杂的WHERE子句,只使用覆盖索引是有用的。
除了以上的建议,你也可以使用汇总表,它们允许你表保持更新,你可以使用触发器或应用程序逻辑将汇总表都是新的状态,或定期运行批处理作业继续填充新的数据信息,如果你使用的是后者,你该信息将非常接近,但不完全,取决于长的间歇操作,应用程序需要权衡的准确信息的需要,并保持数据更新的开销,在两者之间找到一个平衡。
4、优化查询
在子查询中,MySQL查询优化引擎并不总是最有效的,这就是为什么子查询进入连接查询,优化器已经能够正确地处理查询,当然应该注意,以确保连接列的连接表(第二米)被索引。在MySQL上的第一个表通常与一个完整的表扫描第二查询表子集相比较,这是嵌套循环算法的一部分。
5。优化联盟
使用多个不同的数据库联合是一个有趣的优化方法,从两个不相关的列表联合数据,这意味着该行将不会重复,但也有排序的数据,我们知道,排名是非常昂贵的,特别是对表排序。
联合都能大大加快速度。如果你已经知道你的数据不包括重复行,或者你不在乎会有重复的行,它更适合使用联盟在这两种情况。此外,一些方法可以应用于应用程序的逻辑来避免重复的行,这样的联盟和联盟返回结果是相同的,但工会都不会整理。
总结
虽然在本文中列出的优化方法是不完整的,只要有可能,尽量尝试不同的解决方案,检查查询计划,在大数据集的测试,和定位的基准数据,并在实际应用中观察情况。同时,检查你的慢查询日志提前发现需要尽快调整查询。
希望本文能帮助您设计MySQL数据库程序。