数据删除优化

伟洪winni 2018-07-18 04:00:49
有一张文章表, 用 status (1- 正常 2-删除 ) 来表示文章是否删除.
然后有一个模板要显示最新的十条文章:SQL语句: select title from tables where status=1 order by time desc
当数据量变大的时候, 查询速度越来越慢, 请问这个可以怎么优化?
...全文
1075 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2018-09-30
  • 打赏
  • 举报
回复
引用 14 楼 qq_20203755 的回复:
mysql 自增id不连续 会影响速度吗?
不会影响速度
伟洪winni 2018-09-29
  • 打赏
  • 举报
回复
mysql 自增id不连续 会影响速度吗?
叶落千尘 2018-09-19
  • 打赏
  • 举报
回复
千万以上的表,可以做一下数据分离,比如把status为2的放到另一张表里。 在time上建立索引,或者创建一个主键,利用主键 status字段上建立索引的话,以后肯定是要删除的,因为这种字段是最不应该建立索引的
luyaran 2018-08-28
  • 打赏
  • 举报
回复
先限制ID,这样就不会全表扫描了,之后再按着条件进行查询排序
mingqing6364 2018-08-22
  • 打赏
  • 举报
回复
引用 5 楼 zjcxc 的回复:
建立 status,time 上的复合索引
如果可以分区,则至少按 status 分区

他的status取值范围只有1和2,这种取值范围较小的字段建立索引也没用吧?
引擎在查询这种字段时,会利用ref方式扫描
leo_huang_csdn 2018-08-14
  • 打赏
  • 举报
回复
基本time上加索引就可用了,复合索引都不用加
python_xep 2018-07-25
  • 打赏
  • 举报
回复
建个历史表 把数据定期往历史表里折腾 保证表的数据在可控范围内 然后定期optimize表
牛尚小又何妨 2018-07-25
  • 打赏
  • 举报
回复
对status ,time做复合索引应该就够了,感觉没有必要做分区表。
  • 打赏
  • 举报
回复
多少数据?千万以下建索引(time,status),千万以上可以分表,不过看你这需求,limit 10的话,无所谓,分不分都行,反正只要有索引,会很快很快的
Rotel-刘志东 2018-07-19
  • 打赏
  • 举报
回复
没有索引可不就是全表扫描,加复合索引status ,time
zjcxc 2018-07-19
  • 打赏
  • 举报
回复
建立 status,time 上的复合索引
如果可以分区,则至少按 status 分区
ckc 2018-07-19
  • 打赏
  • 举报
回复
把时间比较久的数据移到历史表,或者把表分区,这样就可以在比较小的范围内搜索
伟洪winni 2018-07-19
  • 打赏
  • 举报
回复
引用 2 楼 lzd_83 的回复:
select title from tables where status=1 order by time desc
limit 10


status = 1 的时候会扫描全表吧
我想把所有删除的数据放在另一张表, 这样查询时不用status=1 会更快?
Rotel-刘志东 2018-07-18
  • 打赏
  • 举报
回复
select title from tables where status=1 order by time desc
limit 10
luyaran 2018-07-18
  • 打赏
  • 举报
回复
索引,或者查询缓存

56,940

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧