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