【发布时间】:2020-07-01 04:47:37
【问题描述】:
我有一个应用程序,其功能基本上类似于网格,用户可以在其中查看数据并按任何列进行排序/过滤。这是非常少量的数据(~200K 行 / 50MB),但太大而无法舒适地放入浏览器并在 javascript 中完成。
我想到的最粗略/最简单的方法是将其存储在 mysql 表中,并在每一列(是的,每个列)上都有一个索引。数据库/表大约有 99% 的读取/1% 的写入,所以如果插入时间增加 100 倍左右,我不太担心。
执行上述操作有什么缺点吗?我应该关注哪些类型的事情?有没有更好的(服务器端)方法来做这样的事情?
【问题讨论】:
-
会占用更多空间。
-
@GordonLinoff 应该没问题——数据库大约 5MB,我想我有大约 100GB 的数据库,暂时除了这个应用程序之外没有其他用途。
-
因为多列索引将有利于多个标准并逐级扩大问题空间,因此请注意慢查询并查看可以完成哪些多列值。幸运的是你有一个小数据集。
-
索引在没有很多不同值的列上没有那么有效。只有几个不同值的列可能会更好地响应表扫描而不是索引。
-
设置 long_query_time=0.05 并启用慢查询日志并查看查询 (pt-query-digest)。 General index principles - 索引的顺序很重要,例如范围之前的常量 ref (WHERE X=const) (X BETWEEN yconst AND zconst)。获取use EXPLAIN,您将很快掌握查询可以/不能使用的索引。
标签: mysql sql indexing database-design spreadsheet