我刚刚阅读了Coding Horror: Maybe Normalizing Is not Normal,他们特别说规范化会降低 SELECT 查询的性能,因为有许多INNER JOIN
语句。
但是我有一个表,我打算将几个 TEXT 列放在单独的表中,这样我就可以比较整数索引而不是字符串,但是现在我阅读了这篇文章,我不确定是否应该这样做。
例如,如果我们比较这个非规范化表:
CREATE TABLE addresses (country TEXT, city TEXT, address TEXT);
SELECT address FROM addresses WHERE Country=? AND City=?;
使用规范化形式:
CREATE TABLE countries (name TEXT UNIQUE);
CREATE TABLE cities (name TEXT UNIQUE);
CREATE TABLE addresses (country INT, city INT, address TEXT);
SELECT addresses.address FROM addresses INNER JOIN countries ON countries.ROWID=addresses.country INNER JOIN cities ON cities.ROWID==addresses.city WHERE countries.name=? AND cities.name=?;
第二种形式是更慢、更快还是与 SQLite 的第一种形式速度相同?