PHP MYSQL-使用索引?在这种情况下是否可能?

时间:2017-06-23 08:59:55

标签: php mysql performance indexing

我的mysql数据库具有以下结构:

enter image description here

当我对它运行一个简单的查询时,执行最多需要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秒?

谢谢你的时间

Explain statement

2 个答案:

答案 0 :(得分:4)

您当前的结构存在多个问题:

  • 您应该为列使用尽可能小的类型,例如enum用于具有一些固定可能值的列(“是”,“否”,“可能”)或更简单的boolean用于“是”/“否”列。
  • 您不应将时间存储在varchar列中,而应timetimestamp
  • 也许您应该将现有的date列转换为datetime,因为您可能希望存储时间。
  • 除非您有充分的理由,否则不应将二进制数据存储在数据库中。

修复所有问题后,您可以在两列上添加组合索引,以进一步缩短执行时间:

CREATE INDEX issignedinandstaff ON signin_entries (issignedin, isstaff)

答案 1 :(得分:0)

issignedin是一个文本列。你不能索引文本列。将其更改为varchar并添加索引。