我们说我有下表,可以包含100M +行。
表格示例
id user_id week content created
========================================================================
1 100022312 1 <data to be searched> <timestamp>
2 102232123 1 <data to be searched> <timestamp>
...
10.000.000 126387126 1 <data to be searched> <timestamp>
10.000.001 100022312 2 <data to be searched> <timestamp>
10.000.002 102232123 2 <data to be searched> <timestamp>
...
20.000.000 126387126 2 <data to be searched> <timestamp>
....
第3,4,5,6周......
我会像这样查询表格:
SELECT * FROM table WHERE week='2' AND content LIKE %word%
我的问题:
我可以使用索引使此查询运行得更快吗?怎么样?
有没有办法索引一行?我的意思是,我想索引每周的每一行,以便下次选择时,它首先查看索引,匹配周数,然后搜索该批次。这意味着nr indexes == nr weeks
。
数据插入无关紧要。我也不需要任何排序。
我正在使用MyISAM。
答案 0 :(得分:2)
在week
和content
列上使用多列索引:
ALTER TABLE yourTable ADD INDEX (week, content);
如果您在其中间搜索文本,则字符串列上的索引将无济于事。但它会对精确匹配和前缀匹配有所帮助,如果您执行content = 'word'
或content LIKE 'word%'
会有用。
答案 1 :(得分:1)
切换到FULLTEXT
上的content
索引。