数码资讯
语句优化的MySQL
但是请注意,下面的优化是不complete.mysql做了很多优化,但我没有时间测试它。 下面列出了MySQL的一些优化: 删除不必要的括号: ((A和B)和C(((A和B)和(C和))))) (a和b和)C(或)a和b和c和d) 不断的调整: (a b和b=c)和a=5 和b=a和5=5 删除常数
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
但是请注意,下面的优化是不complete.mysql做了很多优化,但我没有时间测试它。
下面列出了MySQL的一些优化:
删除不必要的括号:
((A和B)和C(((A和B)和(C和)))))
(a和b和)C(或)a和b和c和d)
不断的调整:
(a b和b=c)和a=5
和b=a和5=5
删除常数条件:
(b=5和b=5)或(b=6和5=5)或(b=7和5=6)
b = 5或- = 6
索引使用的常量表达式只计算一次。
计数(*)在一个表上没有位置,直接从表中检索信息。
对无效常量表达式的早期检测。MySQL不可能快速检测某些SELECT语句而不返回行。
如果不使用组或按组函数(计数()、min()……),则合并在哪里。
对于每个子连接,构造一个更简单的地方,以便更快地计算并跳过记录。
所有的常数表在查询之前都在其他表中读取。
常数表是:
一张空桌子或一张有1行的桌子。
一个表,它与唯一索引或主键中的WHERE子句一起使用,其中所有索引部分使用常量表达式,索引部分定义为非空。
下列所有表都用作常数表:
MySQL >选择*从T那里primary_key = 1;
MySQL >选择*从T1,T2,T1和T2。primary_key = 1。primary_key = t1.id;
通过尝试所有的可能性,可以找到对联表的最佳组合:(如果顺序和组中的所有列都来自同一个表,则在连接连接时首先选择该表。
如果你使用sql_small_result,MySQL将在内存中使用一个表。
如果有一个BY子句和一个不同的按组子句,或者如果按顺序或分组包含来自其他表的列,而不是来自联接队列中的第一个表,则创建一个临时表。
由于在所有列上都可以将一个组转换为一个组,所以在许多情况下,不同的和按顺序的组合也需要一个临时表。
每个表的索引都被查询,并使用一个索引,该索引小于该行的30%。如果找不到这样的索引,将使用快速表扫描。
在某些情况下,MySQL可以读取索引的访问,甚至不必查询数据文件。如果索引使用的所有列都是数字,则只使用索引树来回答查询。
在导出每个记录之前,将跳过与已存在子句不匹配的行。
下面是一些快速查询示例:
MySQL >选择计数(*)从tbl_name;
MySQL >选择min(key_part1)、马克斯(key_part1)从tbl_name;
MySQL >选择最大(key_part2)从tbl_name
在key_part_1 =常数;
选择>…从tbl_name
为了key_part1,key_part2,…限制10;
选择>…从tbl_name
通过key_part1倒序,key_part2 desc,…限制10;
下面的查询可以通过只使用索引树(假设索引列是数字)来解决:
MySQL >选择key_part1,key_part2从tbl_name哪里key_part1 = val;
MySQL >选择计数(*)从tbl_name
WHERE key_part1=val1 AND key_part2=val2;
MySQL >选择key_part2从tbl_name组key_part1;
以下查询是使用索引检索排序顺序,而无需额外排序:
选择>…从key_part1 tbl_name秩序,key_part2,…
选择>…从key_part1 DESC tbl_name秩序,key_part2 desc,…
下面列出了MySQL的一些优化:
删除不必要的括号:
((A和B)和C(((A和B)和(C和)))))
(a和b和)C(或)a和b和c和d)
不断的调整:
(a b和b=c)和a=5
和b=a和5=5
删除常数条件:
(b=5和b=5)或(b=6和5=5)或(b=7和5=6)
b = 5或- = 6
索引使用的常量表达式只计算一次。
计数(*)在一个表上没有位置,直接从表中检索信息。
对无效常量表达式的早期检测。MySQL不可能快速检测某些SELECT语句而不返回行。
如果不使用组或按组函数(计数()、min()……),则合并在哪里。
对于每个子连接,构造一个更简单的地方,以便更快地计算并跳过记录。
所有的常数表在查询之前都在其他表中读取。
常数表是:
一张空桌子或一张有1行的桌子。
一个表,它与唯一索引或主键中的WHERE子句一起使用,其中所有索引部分使用常量表达式,索引部分定义为非空。
下列所有表都用作常数表:
MySQL >选择*从T那里primary_key = 1;
MySQL >选择*从T1,T2,T1和T2。primary_key = 1。primary_key = t1.id;
通过尝试所有的可能性,可以找到对联表的最佳组合:(如果顺序和组中的所有列都来自同一个表,则在连接连接时首先选择该表。
如果你使用sql_small_result,MySQL将在内存中使用一个表。
如果有一个BY子句和一个不同的按组子句,或者如果按顺序或分组包含来自其他表的列,而不是来自联接队列中的第一个表,则创建一个临时表。
由于在所有列上都可以将一个组转换为一个组,所以在许多情况下,不同的和按顺序的组合也需要一个临时表。
每个表的索引都被查询,并使用一个索引,该索引小于该行的30%。如果找不到这样的索引,将使用快速表扫描。
在某些情况下,MySQL可以读取索引的访问,甚至不必查询数据文件。如果索引使用的所有列都是数字,则只使用索引树来回答查询。
在导出每个记录之前,将跳过与已存在子句不匹配的行。
下面是一些快速查询示例:
MySQL >选择计数(*)从tbl_name;
MySQL >选择min(key_part1)、马克斯(key_part1)从tbl_name;
MySQL >选择最大(key_part2)从tbl_name
在key_part_1 =常数;
选择>…从tbl_name
为了key_part1,key_part2,…限制10;
选择>…从tbl_name
通过key_part1倒序,key_part2 desc,…限制10;
下面的查询可以通过只使用索引树(假设索引列是数字)来解决:
MySQL >选择key_part1,key_part2从tbl_name哪里key_part1 = val;
MySQL >选择计数(*)从tbl_name
WHERE key_part1=val1 AND key_part2=val2;
MySQL >选择key_part2从tbl_name组key_part1;
以下查询是使用索引检索排序顺序,而无需额外排序:
选择>…从key_part1 tbl_name秩序,key_part2,…
选择>…从key_part1 DESC tbl_name秩序,key_part2 desc,…
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。