单表如何提高Select的效率?
Jun 06, 2016 pm 08:18 PM
情景:一个分类页面,因为每页显示的文章数量是固定的,通过设置偏移量来实现分页,大致如下:
<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辅助一下

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian

Bagaimana untuk membetulkan ralat mysql_native_password tidak dimuatkan pada MySQL 8.4

Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP
