Mysql 解释说明查询很糟糕(它不使用单个键),但我使用的是limit1。这是个问题吗?
explain命令用于查询:Mysql 解释说明查询很糟糕(它不使用单个键),但我使用的是limit1。这是个问题吗?,mysql,optimization,indexing,explain,Mysql,Optimization,Indexing,Explain,explain命令用于查询: explain SELECT * FROM leituras WHERE categorias_id=75 AND textos_id=190304 AND cookie='3f203349ce5ad3c67770ebc882927646' AND endereco_ip='127.0.0.1' LIMIT 1 结果是: id select_type table type possible_keys key
explain SELECT * FROM leituras
WHERE categorias_id=75 AND
textos_id=190304 AND
cookie='3f203349ce5ad3c67770ebc882927646' AND
endereco_ip='127.0.0.1'
LIMIT 1
结果是:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE leituras ALL (null) (null) (null) (null) 1022597 Using where
在桌子上加几把钥匙会有什么不同吗?即使查询总是只返回一行。它仍然必须对表进行线性搜索,直到找到那一行。因此,添加索引可以显著提高性能。它仍然需要对表进行线性搜索,直到找到一行。因此,添加索引可以显著提高性能。回答您的问题,是的。您应该在where子句中出现的列上添加必要的索引,谢谢@Col.shrapanel,在本例中为categorias_id、textos_id、cookie和endereco_ip
如果您总是使用WHERE子句中的相同3列执行查询,则一次添加包含这3列的索引可能比添加单个索引更有益。在回答您的问题时,是的。您应该在where子句中出现的列上添加必要的索引,谢谢@Col.shrapanel,在本例中为categorias_id、textos_id、cookie和endereco_ip
如果总是在WHERE子句中使用相同的3列执行查询,则一次添加包含这3列的索引可能比添加单独的索引更为有益。是的,如果只想返回一行,则索引更为重要 如果返回一半的行,并且数据库系统必须扫描整个表,那么效率仍然是50% 然而,如果您只想返回一行,并且数据库系统必须扫描1022597行才能找到您的行,那么您的效率是微乎其微的 限制1确实提供了一些效率,因为它在找到第一个匹配行时立即停止,但它显然必须扫描大量记录才能找到第一行 为WHERE子句中的每一列添加索引可使数据库系统避免扫描不符合条件的行。有了足够的索引,您将看到explain中的rows列将更接近返回的实际行数 使用覆盖WHERE子句中所有四列的复合索引可以实现更好的性能和更少的扫描,因为索引将提供完全覆盖。复合索引确实会占用大量内存并对插入性能产生负面影响,因此,如果大部分查询重复查找相同的列,或者很少插入记录,或者特定查询的速度对您来说非常重要,则可能只希望添加复合索引
另一种提高性能的方法是只返回所需的列,而不是使用SELECT*。如果在这四列上有一个复合索引,并且只返回这四列,那么数据库系统根本不需要访问记录。数据库系统可以从索引中获得所需的一切。是的,当您只想返回一行时,索引更为重要 如果返回一半的行,并且数据库系统必须扫描整个表,那么效率仍然是50% 然而,如果您只想返回一行,并且数据库系统必须扫描1022597行才能找到您的行,那么您的效率是微乎其微的 限制1确实提供了一些效率,因为它在找到第一个匹配行时立即停止,但它显然必须扫描大量记录才能找到第一行 为WHERE子句中的每一列添加索引可使数据库系统避免扫描不符合条件的行。有了足够的索引,您将看到explain中的rows列将更接近返回的实际行数 使用覆盖WHERE子句中所有四列的复合索引可以实现更好的性能和更少的扫描,因为索引将提供完全覆盖。复合索引确实会占用大量内存并对插入性能产生负面影响,因此,如果大部分查询重复查找相同的列,或者很少插入记录,或者特定查询的速度对您来说非常重要,则可能只希望添加复合索引
另一种提高性能的方法是只返回所需的列,而不是使用SELECT*。如果在这四列上有一个复合索引,并且只返回这四列,那么数据库系统根本不需要访问记录。数据库系统可以从索引中获得所需的一切。谢谢你!我将添加索引以提高查询性能。谢谢你!我将添加索引以提高查询性能。