我的mysql数据库具有以下结构:
当我对它运行一个简单的查询时,执行最多需要30秒。 查询是 -
SELECT signinid,photo,first_name,last_name,persontosee,signindate,signintime,isstaff,signouttime,signoutdate,issignedin,companyname,veh_reg
FROM signin_entries
WHERE issignedin ='YES'
AND isstaff='YES'
当我针对此运行EXPLAIN时,我可以看到它正在处理所有1180行,问题是列,照片,签名和qr代码都包含base64编码的字符串。 (虽然在我的选择声明中我只是查询'照片')
我如何为此创建索引?索引甚至是正确的方法吗?为什么执行简单查询最多需要30秒?
谢谢你的时间
答案 0 :(得分:4)
您当前的结构存在多个问题:
enum
用于具有一些固定可能值的列(“是”,“否”,“可能”)或更简单的boolean
用于“是”/“否”列。varchar
列中,而应time
或timestamp
。date
列转换为datetime
,因为您可能希望存储时间。修复所有问题后,您可以在两列上添加组合索引,以进一步缩短执行时间:
CREATE INDEX issignedinandstaff ON signin_entries (issignedin, isstaff)
答案 1 :(得分:0)
issignedin是一个文本列。你不能索引文本列。将其更改为varchar并添加索引。