MySQL性能优化:按日期时间字段排序

MySQL性能优化:按日期时间字段排序,第1张

MySQL性能优化:按日期时间字段排序

postings (is_active, post_date)
(按此顺序)上创建一个复合索引

它将用于按进行过滤

is_active
和排序
post_date

MySQL
应该在中显示
REF
对此索引的访问方法
EXPLAIN EXTENDED

请注意,您在上有一个

RANGE
过滤条件
user_offtopic_count
,这就是为什么在过滤和按其他字段排序时都不能在该字段上使用索引的原因。

根据您选择的程度

user_offtopic_count
(即,满足多少行
user_offtopic_count <10
),创建索引
user_offtopic_count
并对post_dates进行排序可能会更有用。

为此,在上创建一个复合索引,

postings (is_active,user_offtopic_count)
并确保
RANGE
使用对该索引的访问方法。

哪个索引会更快取决于您的数据分布。创建两个索引,

FORCE
然后看看哪个更快:

CREATE INDEX ix_active_offtopic ON postings (is_active, user_offtopic_count);CREATE INDEX ix_active_date ON postings (is_active, post_date);SELECt     `postings`.`id`,     UNIX_TIMESTAMP(postings.post_date) as post_date,     `postings`.`link`,     `postings`.`title`,     `postings`.`author`,     `postings`.`excerpt`,     `postings`.`long_excerpt`,     `feeds`.`title` AS feed_title,     `feeds`.`website` AS feed_websiteFROM     `postings` FORCE INDEX (ix_active_offtopic)JOIN     `feeds` ON     `feeds`.`id` = `postings`.`feed_id`WHERe     `feeds`.`type` = 1 AND     `postings`.`user_offtopic_count` < 10 AND     `postings`.`is_active` = 1ORDER BY     `postings`.`post_date` descLIMIT     15SELECt     `postings`.`id`,     UNIX_TIMESTAMP(postings.post_date) as post_date,     `postings`.`link`,     `postings`.`title`,     `postings`.`author`,     `postings`.`excerpt`,     `postings`.`long_excerpt`,     `feeds`.`title` AS feed_title,     `feeds`.`website` AS feed_websiteFROM     `postings` FORCE INDEX (ix_active_date)JOIN     `feeds` ON     `feeds`.`id` = `postings`.`feed_id`WHERe     `feeds`.`type` = 1 AND     `postings`.`user_offtopic_count` < 10 AND     `postings`.`is_active` = 1ORDER BY     `postings`.`post_date` descLIMIT     15


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4943649.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-13
下一篇 2022-11-13

发表评论

登录后才能评论

评论列表(0条)

保存