互联网广告推广是做什么的,南宁seo网站建设费用,汶上网站建设哪家便宜,南阳企业网站一个sql效率的问题
问题
假设created_at 是date类型、是索引#xff0c;那么以下2种方式有没效率差异#xff1a;
WHERE TO_CHAR(created_at, ‘YYYY-MM-DD’) ‘2020-02-01’WHERE created_at TO_DATE(‘2020-02-01’ , ‘YYYY-MM-DD’)
DBA回复
有的#xff0c;第一…一个sql效率的问题
问题
假设created_at 是date类型、是索引那么以下2种方式有没效率差异
WHERE TO_CHAR(created_at, ‘YYYY-MM-DD’) ‘2020-02-01’WHERE created_at TO_DATE(‘2020-02-01’ , ‘YYYY-MM-DD’)
DBA回复
有的第一个不会走索引因为使用了函数。解释 在 SQL 中对字段使用函数如 TO_CHAR 或TO_DATE通常会对查询效率产生影响因为这会使数据库无法使用索引来加速查询。当你对一个已经索引的字段如例子中的created_at使用函数时这个索引通常会被绕过导致全表扫描从而降低查询性能。 在以上例子中 WHERE TO_CHAR(created_at, ‘YYYY-MM-DD’) ‘2020-02-01’ 将 created_at字段转换成字符串然后与一个字符串进行比较。这会导致数据库无法使用索引因为它在进行比较之前需要将字符串转换回日期格式。 WHERE created_at TO_DATE(‘2020-02-01’ , ‘YYYY-MM-DD’)将一个字符串日期转换为日期格式然后与 created_at 字段进行比较。那么这个查询仍然可以使用索引因为转换操作是在 WHERE 子句外部完成的。 因此第二个查询WHERE created_at TO_DATE(‘2020-02-01’ ,‘YYYY-MM-DD’)在大多数情况下应该比第一个查询更快因为它可以利用索引。然而这也取决于数据库的优化器如何处理这种情况以及表中的数据分布。 如果可能的话尽量避免在 WHERE子句中对索引字段使用函数以保持查询性能。如果需要以特定的格式进行日期比较考虑在应用层进行这种转换而不是在数据库层。