搜索中的INT与VARCHAR

Vin*_*ent 11 mysql sql database search database-design

以下哪个查询会更快,更优化(以及为什么):

  1. SELECT * FROM items WHERE w = 320 AND h = 200 (w和h是INT)

  2. SELECT * FROM items WHERE dimensions = '320x200'(尺寸为VARCHAR)

dan*_*n04 6

这是一些实际测量.(使用SQLite;稍后可以尝试使用MySQL.)

数据=随机顺序的所有1,000,000个w,h∈{1 ... 1000}的组合.

CREATE TABLE items (id INTEGER PRIMARY KEY, w INTEGER, h INTEGER)

执行的平均时间(20次运行)为SELECT * FROM items WHERE w = 320 and h = 2005.39±0.29μs.

CREATE TABLE items (id INTEGER PRIMARY KEY, dimensions TEXT)

平均执行时间为SELECT * FROM items WHERE dimensions = '320x200'5.69±0.23μs.

效率方面没有显着差异.

可用性方面存在巨大差异.例如,如果要计算矩形的面积和周长,则可以轻松实现双列方法:

SELECT w * h, 2 * (w + h) FROM items

尝试以其他方式编写相应的查询.