优化MySQL选择查询?

优化MySQL选择查询?,mysql,sql,optimization,select,Mysql,Sql,Optimization,Select,在“大型”数据库上,可以对以下查询进行多少更改以提高其性能 SELECT SQL_CALC_FOUND_ROWS wp_rb_posts.* FROM wp_rb_posts WHERE 1=1 AND ((guid = '956e208f101562f6654e88e9711276e4') OR (guid = 'http://www.r-bloggers.com/?guid=956e208f101562f6654e88e9711276e4') OR (guid =

在“大型”数据库上,可以对以下查询进行多少更改以提高其性能

SELECT SQL_CALC_FOUND_ROWS wp_rb_posts.* 
FROM wp_rb_posts 
WHERE 1=1 
  AND ((guid = '956e208f101562f6654e88e9711276e4') 
   OR (guid = 'http://www.r-bloggers.com/?guid=956e208f101562f6654e88e9711276e4') 
   OR (guid = 'http://www.r-bloggers.com/?guid=956e208f101562f6654e88e9711276e4') 
   OR (MD5(guid) = '956e208f101562f6654e88e9711276e4')) 
 AND wp_rb_posts.post_type 
   IN ('post', 'page', 'attachment', 'revision', 'nav_menu_item') 
 AND (wp_rb_posts.post_status = 'publish' 
        OR wp_rb_posts.post_status = 'future' 
        OR wp_rb_posts.post_status = 'draft' 
        OR wp_rb_posts.post_status = 'pending' 
        OR wp_rb_posts.post_status = 'trash' 
        OR wp_rb_posts.post_status = 'auto-draft' 
        OR wp_rb_posts.post_status = 'inherit' 
        OR wp_rb_posts.post_status = 'private') 
ORDER BY wp_rb_posts.post_date DESC LIMIT 1400, 10;

我将查看该查询的执行计划,然后确保您已经设置了索引来优化查询。根据执行计划,您还可以看到对查询的部分重新排序将提高性能

直接回答你的问题,尽管著名的“视情况而定”答案在这里有效。我必须查看数据库,运行查询,查看执行计划,查看索引内容,以及查看执行计划生成的子句顺序如何影响性能等


希望这对您有所帮助。

在不了解所涉及的表的情况下,我根据查询中字段的名称进行猜测。我猜查询中限制最严格的部分是
guid=…
部分。从查询的结构中还可以看出,该字段的内容没有完全定义好(有时可能有md5哈希值,有时没有)。如果这是正确的,那么使用
md5(guid)='…'
可能意味着它无法有效地限制查询的该部分

因此,如果可能的话,如果您有一个始终包含guid字段的md5哈希值的字段,那么似乎会使搜索更加高效。然后可以对该字段进行索引,并为查询的该部分提供更高效的查找

为了澄清,只考虑这个问题:

SELECT SQL_CALC_FOUND_ROWS wp_rb_posts.* 
FROM wp_rb_posts WHERE
   (guid = '956e208f101562f6654e88e9711276e4') OR
   (MD5(guid) = '956e208f101562f6654e88e9711276e4')) 
假设MySQL不允许使用标量函数的索引(我认为它不允许,如果我错了,那么整个答案是毫无意义的),那么该查询将需要对每个记录进行完整的表扫描计算
md5(guid)
。然而,可以更好地优化以下查询(假设两个字段上都存在索引):

SELECT SQL_CALC_FOUND_ROWS wp_rb_posts.* 
FROM wp_rb_posts WHERE
   (guid = '956e208f101562f6654e88e9711276e4') OR
   (md5_guid = '956e208f101562f6654e88e9711276e4') 

请尝试格式化您的代码,以便将来可读。这是一个痛苦的重新格式化。Jacco-no.Oded-抱歉,谢谢!黑暗中拍摄,但不会wp_rb_posts.*更改为类似wp_rb_posts.id的东西可以加快速度吗?