这里有很多细节,我的主要目标是尽快做到这一点。
- 我正在调用一个 API,该 API 返回一个大的 json 编码字符串。
- 我将带引号的编码字符串存储到 MySQL (InnoDB) 中,其中包含 3 个字段:(tid (key)、json、tags),位于名为
store
的表中。 我将在最多 3 个多月后,通过以下方式从该数据库中提取信息:
WHERE tags LIKE "%something%" AND "%somethingelse%"
标签以 + 分隔。 (这使得它们太长而无法有效地键入。) 示例:
'anime+pikachu+shingeki no kyojin+pokemon+eren+attack on titan+'
我不希望随时重复 API 调用。如果您要包含 API 调用,请使用:
API(tag, time);
需要所有 JSON 数据。
此表是一个事件存档。
我的一个想法是将标签放入它们自己的两列表中(pid,标签(键))。 pid 指向store 表中的tid。
问题
- 我可以更改任何 MySQL 配置来加快速度吗?
- 是否可以对表结构进行更改以加快速度?
- 我还能做些什么来加快速度吗?
引用的 JSON 示例(困惑,要查看另一个干净的示例,请参阅 TUMBLR APIv2):
'{\"blog_name\":\"roxannemariegonzalez\",\"id\":62108559921,\"post_url\":\"http:\\/\\/roxannemariegonzalez.tumblr.com\\/post\\/62108559921\"、\"slug\":\"\"、\"类型\":\"照片\"、\"日期\":\"2013-09-24 00:36:56 GMT\",\"时间戳\":1379983016,\"状态\":\"已发布\",\"格式\":\"html\",\"reblog_key\":\"uLdTaScb\",\"标签\":[\"动漫\"、\"皮卡丘\"、\"新世纪的巨人\"、\"口袋妖怪\"、\"艾伦\"、\"进击的巨人\"]、\"short_url\":\"http:\\/\\/tmblr.co\\/ZxlLExvrzMen\",\"突出显示\":[],\"书签\":true,\"note_count\":19,\"source_url\":\"http:\\/\\/weheartit.com\\/entry\\/78231354\\/via\\/roxannegonzalez?page=2\",\"source_title\":\"weheartit.com\",\"标题\":\"\",\"link_url\":\"http:\\/\\/weheartit.com\\/entry\\/78231354\\/via\\/roxannegonzalez\",\"image_permalink\":\"http:\\/\\/roxannemariegonzalez.tumblr.com\\/image\\/62108559921\",\"照片\":[{\"标题\":\"\",\"alt_sizes\":[{\"宽度\":500,\"高度\":444,\"url\":\"http:\\/\\/31.media.tumblr.com\\/c8a87bee925b0b0674773af63e43f954\\/tumblr_mtltpkLvuo1qmfyxko1_500.png\"},{\"宽度\":400,\"高度\":355,\"url\":\"http:\\/\\/25.media.tumblr .com\\/c8a87bee925b0b0674773af63e43f954\\/tumblr_mtltpkLvuo1qmfyxko1_400.png\"},{\"宽度\":250,\"高度\":222,\"url\":\"http:\\/\\/31 .media.tumblr.com\\/c8a87bee925b0b0674773af63e43f954\\/tumblr_mtltpkLvuo1qmfyxko1_250.png\"},{\"宽度\":100,\"高度\":89,\"url\":\"http:\\/\\/25.media.tumblr.com\\/c8a87bee925b0b0674773af63e43f954\\/tumblr_mtltpkLvuo1qmfyxko1_100.png\"},{\"宽度\":75,\"高度\":75,\"url\":\"http :\\/\\/25.media.tumblr.com\\/c8a87bee925b0b0674773af63e43f954\\/tumblr_mtltpkLvuo1qmfyxko1_75sq.png\"}],\"original_size\":{\"宽度\":500,\"高度\": 444,\"url\":\"http:\\/\\/31.media.tumblr.com\\/c8a87bee925b0b0674773af63e43f954\\/tumblr_mtltpkLvuo1qmfyxko1_500.png\"}}]}'
最佳答案
研究一下Mysql MATCH()/AGAINST()函数和FULLTEXT索引功能,这可能就是您正在寻找的。确保 FULLTEXT 索引能够在 json 文档上合理运行。
我们谈论的数据大小是什么样的?如今,大量内存很便宜,因此将整个 Mysql 数据集缓冲在内存中,以便您可以进行全文扫描并不是不合理的。
分解一些 json 字段值并将它们放入自己的列中可以让您快速搜索这些值......但这对一般情况没有帮助。
关于php - MySQL针对数据表的优化和查询优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19062882/