Heim >Backend-Entwicklung >PHP-Tutorial >单表如何提高Select的效率?

单表如何提高Select的效率?

WBOY
WBOYOriginal
2016-06-06 20:18:471276Durchsuche

情景:一个分类页面,因为每页显示的文章数量是固定的,通过设置偏移量来实现分页,大致如下:

<code>SELECT * FROM test WHERE status=1 AND category='mycat' LIMIT 0, 30</code>

在访问量大且偏移量大的情况下,性能不是很理想,而且随着数据量增长也比较快,所以想请教在单表的情况下,如何尽可能地进行优化,希望能提供些思路,谢谢

回复内容:

情景:一个分类页面,因为每页显示的文章数量是固定的,通过设置偏移量来实现分页,大致如下:

<code>SELECT * FROM test WHERE status=1 AND category='mycat' LIMIT 0, 30</code>

在访问量大且偏移量大的情况下,性能不是很理想,而且随着数据量增长也比较快,所以想请教在单表的情况下,如何尽可能地进行优化,希望能提供些思路,谢谢

抛开业务上的优化不谈 你可以做的有 优化表结构尽量能在区分度高的条件字段加索引 常用数据走缓存 数据里大的情况下按时间或id进行分表

mysql可以尝试分区(按月份分区),不是水平分表。

就你这个的情况,增加下联合索引再试试。

<code>ALTER TABLE `tablename`   
  ADD  INDEX `xxx-index` (`status`, `category`);</code>

再根据访问量统计一下 status,category组合中查询频率最高的,做一下缓存(可临时table,也可以直接redis等内存数据库)

我有单表接近6000万,组合条件查询结果在90万数据的情况下,翻页还算是正常的,当然可能访问量没你的大。

具体情况要具体分析哈,explain下 扫表的情况,如果表太大用limit比较吃力的时候,可以分表,也可以redis辅助一下

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn