我正在设计一个SQL数据库(通过PHP / MySQL访问),并且对以有助于网站相对快速运行的方式设计数据库存有疑问。我的确切问题与查询具有多列的表格时的速度有关,其中一列的类型为 text 。我想知道,如果
表中是否存在 text 列会影响查询速度吗?作为后续行动,文本列通常会减慢数据库查询的速度吗?
有关数据库设计的任何其他一般提示,以帮助提高查询速度,以及有关此主题的书籍或其他参考的任何建议。谢谢!
答案 0 :(得分:4)
afaik如果您向表中添加文本列没有区别,只要您不在where子句中使用它。 如果你在where子句中使用它,那么在它上面有一个index肯定是好的。避免与喜欢比较,因为它们较慢。
答案 1 :(得分:2)
我不相信text columns are much slower than the alternatives。
指定要返回的列是一个很好的性能选择 - 因为不需要移动比线路所需的数据更多的数据。
如果你的索引正确,你将获得比使用文本列需要更高的性能改进。
如果您执行的数据库读取次数多于写入次数,则索引将提高读取速度。
通过定期删除和重新添加索引来帮助优化器也会有所帮助,因为表的数据形状会随着时间的推移而变化。
答案 2 :(得分:2)
如果您打算在select语句的WHERE子句中使用此列进行过滤,则“text”数据类型只会减慢查询速度。
SELECT textColumn
FROM table WHERE varcharColumn LIKE '%Spanner%'
可以比
更容易优化SELECT varcharColumn
FROM table WHERE textColumn LIKE '%Spanner%'
然而
SELECT textColumn
FROM table WHERE integerColumn = 1
表现得和
一样好SELECT varcharColumn
FROM table WHERE integerColumn = 1
一些常规提示:
作为一般规则,您应该考虑如何在输出中按顺序排序表(按日期或按字母顺序排序?)并在该列上放置索引。
如果您刚开始使用数据库设计,通常应该使用INT主键,这也是您的IDENTITY列和聚集索引。这意味着表将按该列物理排序(在磁盘上)(通常是您的ID,如PersonID等),然后在要过滤和排序的列上使用非聚集索引。
在您构建一些数据库的后期阶段,我建议您通过将聚集索引设置为最常用于订购表的唯一列来进一步优化表设计,包括使用多个列作为您的聚簇索引。