简单情况下,两列表[ID,TEXT]。文本列有1-10个单词短语。 300,000行。什么是在表上运行优化,做出如此巨大的差异?
运行查询:
SELECT * FROM row
WHERE text LIKE '%word%'
...把0.1秒。好。
因此,我创建一个第二柱,表现在有:[ID,TEXT2,TEXT2] 我制成TEXT2
= TEXT(使用UPDATE table SET TEXT2 = TEXT
]
然后我再次运行关于 '%字%' 查询,并。它需要2.4秒
这让我非常非常难住了,但之后不少死胡同,我运行OPTIMIZE在桌子上,和它关系到0.2秒左右
两个问题:
- 有没有人知道数据结构如何在如此混乱的情况下得到自身的效果,即数据翻倍将该查询的搜索时间增加了24倍?
- 像这样的未索引搜索的标准是否以基础表数据结构的速度增加而不是正在搜索的实际列中的数据?
谢谢!
有关数据库的一些知识是,当查询命中优化器时,它并不总是选择与数据相同的路径。我更熟悉Oracle(在SQL Server上少一点) - 都试图在查询必须与文本完全匹配的缓存中查找查询。如果它匹配,则称它为软解析,因为解析已经完成。否则,它必须做一个硬解析,然后软解析... – 2010-06-23 01:23:09
如果你使用通配符启动查询键,无论如何它都要进行表扫描。 – dkretz 2010-06-23 01:45:14
小马...这是OPTOMIZE作为清理数据的mySQL函数 - 我不是在讨论如何优化实际查询。 Dorifer ...是的,我知道它会进行全表扫描。问题依然存在。 – 2010-06-23 11:15:02