我有一个mysql表,其创建代码如下:
CREATE TABLE该表包含大约7,00,000行。我有一个使用PHP开发的应用程序。某处我需要运行以下查询:image_ref
(region
VARCHAR(50) NULL DEFAULT NULL,district
VARCHAR(50) NULL DEFAULT NULL,district_name
VARCHAR(100) NULL DEFAULT NULL,lot_no
VARCHAR(10) NULL DEFAULT NULL,sp_no
VARCHAR(10) NULL DEFAULT NULL,name
VARCHAR(200) NULL DEFAULT NULL,form_no
VARCHAR(50) NOT NULL DEFAULT '',imagename
VARCHAR(50) NULL DEFAULT NULL,updated_by
VARCHAR(50) NULL DEFAULT NULL,update_log
DATETIME NULL DEFAULT NULL,ip
VARCHAR(50) NULL DEFAULT NULL,imgfetchstat
VARCHAR(1) NULL DEFAULT NULL, PRIMARY KEY (form_no
) ) COLLATE='latin1_swedish_ci' ENGINE=MyISAM;
SELECT
min(imagename) imagename
FROM
image_ref
WHERE
district_name = '$sess_district'
AND
lot_no = '$sess_lotno'
AND
imgfetchstat = '0';
平均为1.560秒。 form_no字段仅具有唯一值。完成一些工作后,结果集被提取,imgfetchstat需要更新值1.现在我的要求是,我是否应该使用InnoDB或MyISAM?此外,该应用程序由LAN中约50个用户访问。有没有什么办法可以更快地运行上面的查询?因为提取的imagename用于将分辨率为500 x 498的图像加载到浏览器中,并且它需要足够的时间来加载图像。提前谢谢。
答案 0 :(得分:0)
您可以在表格中添加索引(请注意,这会使存储空间更大 - 但根据您的查询,您应该可以使用以下内容:
ALTER TABLE `table` ADD INDEX `product_id` (`product_id`)
有关详细信息,请参阅http://dev.mysql.com/doc/refman/5.0/en/create-index.html
您可以在单个列上添加索引(这样可以使数据库很好用,即使它在查询中使用了一些索引)但是如果您有一个需要真正快速运行的特定查询,则可以添加一个特定于您的查询的多列索引:
ALTER TABLE image_ref ADD INDEX `someName`
(`district_name`, `lot_no`, `imgfetchstat`)