按日期时间排序时,Mysql查询太慢

按日期时间排序时,Mysql查询太慢,mysql,datetime,indexing,Mysql,Datetime,Indexing,我有一张大约10万行的桌子。我在sql以下运行,但这需要花费太多时间(~4秒): 如果我删除“邮购日期”,一切正常。跑步只需0.05秒 我用CREATE INDEX和ADD INDEX添加了一些索引(我不知道它们之间有什么区别): 然后将这些索引与use INDEX和FORCE INDEX一起使用(我也不知道它们之间有什么区别): 或 我仍然可以得到我的记录,但是加载时间增加到了7-8秒 真的需要你的帮助! 提前感谢 编辑: 表的结构 ID bigint(20) No

我有一张大约10万行的桌子。我在sql以下运行,但这需要花费太多时间(~4秒):

如果我删除“邮购日期”,一切正常。跑步只需0.05秒

我用CREATE INDEX和ADD INDEX添加了一些索引(我不知道它们之间有什么区别):

然后将这些索引与use INDEX和FORCE INDEX一起使用(我也不知道它们之间有什么区别):

我仍然可以得到我的记录,但是加载时间增加到了7-8秒

真的需要你的帮助! 提前感谢

编辑:

表的结构

ID  bigint(20)  No           
post_author bigint(20)  No  0        
post_date   datetime    No  0000-00-00 00:00:00          
post_date_gmt   datetime    No  0000-00-00 00:00:00          
post_content    longtext    No           
post_title  text    No           
post_excerpt    text    No           
post_status varchar(20) No  publish          
comment_status  varchar(20) No  open         
ping_status varchar(20) No  open         
post_password   varchar(255)    No           
post_name   varchar(200)    No           
to_ping text    No           
pinged  text    No           
post_modified   datetime    No  0000-00-00 00:00:00          
post_modified_gmt   datetime    No  0000-00-00 00:00:00          
post_content_filtered   longtext    No           
post_parent bigint(20)  No  0        
guid    varchar(255)    No           
menu_order  int(11) No  0        
post_type   varchar(20) No  post         
post_mime_type  varchar(100)    No           
comment_count   bigint(20)  No  0 
你先要“热门帖子”,然后是“我的帖子”?而且可能只有不到14个辣妹,而且有很多“我的帖子”

一个笨拙的解决办法是

( SELECT ... name='HOT posts' ORDER BY post_date DESC  LIMIT 14 )
UNION ALL
( SELECT ... name='My Posts'  ORDER BY post_date DESC  LIMIT 14 )
ORDER BY field(...), post_date DESC  LIMIT 14
请注意,有一些机会可以快速找到每个类别中最新的14个,然后快速重新排列28个以获得所需的14个

有关多对多表,请参阅,了解如何提高其性能。(默认WP效率相当低。)

如果您需要进一步讨论,请提供
EXPLAIN SELECT…
SHOW CREATE TABLE

您想要的是“热门帖子”,然后是“我的帖子”?而且可能只有不到14个辣妹,而且有很多“我的帖子”

一个笨拙的解决办法是

( SELECT ... name='HOT posts' ORDER BY post_date DESC  LIMIT 14 )
UNION ALL
( SELECT ... name='My Posts'  ORDER BY post_date DESC  LIMIT 14 )
ORDER BY field(...), post_date DESC  LIMIT 14
请注意,有一些机会可以快速找到每个类别中最新的14个,然后快速重新排列28个以获得所需的14个

有关多对多表,请参阅,了解如何提高其性能。(默认WP效率相当低。)


如果您需要进一步讨论,请提供
EXPLAIN SELECT…
SHOW CREATE TABLE

您可以在这里发布带有索引的表结构吗?您可以尝试在
wp\u terms.name
post\u date
上放置一个复合索引吗?为所有相关表提供
SHOW CREATE TABLE
语句,以及
解释的结果
@TimBiegeleisen:对不起,我还是个新手。我不知道如何从两个表中创建索引。您能更清楚地告诉我吗?@phong我想首先您应该将日期字段的默认值设置为null,这是很重要的,它可能会影响性能。您可以在这里发布带有索引的表结构吗?您可以尝试在
wp\u terms.name
post\u date
上放置一个复合索引吗?为所有人提供
SHOW CREATE table
语句相关表格,以及
解释的结果
@TimBiegeleisen:对不起,我还是个新手。我不知道如何从两个表中创建索引。您能更清楚地告诉我吗?@phong我认为首先您应该将日期字段的默认值设置为空,这是必要的,它可能会影响性能
    ...FROM wp_posts p FORCE INDEX (ix_status_type_date)...
ID  bigint(20)  No           
post_author bigint(20)  No  0        
post_date   datetime    No  0000-00-00 00:00:00          
post_date_gmt   datetime    No  0000-00-00 00:00:00          
post_content    longtext    No           
post_title  text    No           
post_excerpt    text    No           
post_status varchar(20) No  publish          
comment_status  varchar(20) No  open         
ping_status varchar(20) No  open         
post_password   varchar(255)    No           
post_name   varchar(200)    No           
to_ping text    No           
pinged  text    No           
post_modified   datetime    No  0000-00-00 00:00:00          
post_modified_gmt   datetime    No  0000-00-00 00:00:00          
post_content_filtered   longtext    No           
post_parent bigint(20)  No  0        
guid    varchar(255)    No           
menu_order  int(11) No  0        
post_type   varchar(20) No  post         
post_mime_type  varchar(100)    No           
comment_count   bigint(20)  No  0 
( SELECT ... name='HOT posts' ORDER BY post_date DESC  LIMIT 14 )
UNION ALL
( SELECT ... name='My Posts'  ORDER BY post_date DESC  LIMIT 14 )
ORDER BY field(...), post_date DESC  LIMIT 14