gpt4 book ai didi

mysql - 带有数据库存储选项的 Codeigniter session 类未优化?

转载 作者:IT王子 更新时间:2023-10-28 23:44:22 26 4
gpt4 key购买 nike

我使用带有将 session 数据存储在数据库中的选项的 codeigniter session 类。这是为检索 session 的每个用户请求运行的选择查询示例:

SELECT *
FROM (`ci_sessions`)
WHERE `session_id` = 'f7fd61f08a229kdu3093130a3da17e14'
AND `user_agent` = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:5.'

这是在 user guide 中定义的 session 数据的表结构:

CREATE TABLE IF NOT EXISTS  `ci_sessions` (
session_id varchar(40) DEFAULT '0' NOT NULL,
ip_address varchar(16) DEFAULT '0' NOT NULL,
user_agent varchar(50) NOT NULL,
last_activity int(10) unsigned DEFAULT 0 NOT NULL,
user_data text DEFAULT '' NOT NULL,
PRIMARY KEY (session_id)
);

据我了解,每当您有一个旨在返回单个结果的查询时,最好使用 LIMIT 0, 1,这样当数据库引擎找到所需的行时,它只会返回而不是继续扫描整个表更多比赛。因此,将此查询编写为更有效:

SELECT *
FROM (`ci_sessions`)
WHERE `session_id` = 'f7fd61f08a229kdu3093130a3da17e14'
AND `user_agent` = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:5.'
LIMIT 0, 1

为什么还没有这样写?

最佳答案

可以只有一行,匹配user_agent和session_id,所以不需要限制选择的数量,它已经被唯一限制了。

该问题已报告给 Bitbucket 上的 Codeigniter Reactor 开发人员,并因无效而被驳回:

https://bitbucket.org/ellislab/codeigniter-reactor/issue/422/session-class-should-use-limit-1-when

他们的回应:

the session_id field is a primary key so it's going to be a unique row

Is there any point using MySQL "LIMIT 1" when querying on indexed/unique field?

所以看起来这实际上不是优化,只是没有必要。

关于mysql - 带有数据库存储选项的 Codeigniter session 类未优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6913735/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com