gpt4 book ai didi

php - mysql UUID as String 如何加快查询速度

转载 作者:行者123 更新时间:2023-11-29 08:29:03 25 4
gpt4 key购买 nike

我的 UUID 是字符串,我的数据库中有数千个项目。我的查询看起来甚至是基本的,似乎需要几秒钟的时间来加载 - 当我做更复杂的查询时,我们正在谈论几分钟的时间。

我相信我最大的瓶颈是我进行了数千次字符串比较

有没有办法让我的数据库保持原样 - 但转换查询语法以将 UUID 转换为数字?

或者,如果这没有帮助,我该如何将字符串转换为数字?

谢谢

编辑:

我有 16 个表,全部互连,因此很难发布它们是如何互连的,但这里有一些示例:

field  Type
UUID - TEXT

"SELECT * FROM customer WHERE UUID = '$custUUID'";

如果我从 phpmyadmin 运行它,这个简单的查询需要 0.7 秒,我尝试执行此操作数百次 = 漫长的加载时间

MySQL returned an empty result set (i.e. zero rows). ( Query took 0.6967 sec )
SELECT *
FROM customer
WHERE UUID = '1234'
LIMIT 0 , 30

这是一个需要很长时间的更复杂查询的示例reportdate、contract_UUID、customer_UUID、garcom_UUID 和 city_UUID 均为文本类型

$query = "SELECT DISTINCT a.weekreportDate FROM contract_sales a 
INNER JOIN contract b ON a.contract_UUID = b.UUID
INNER JOIN geoPoint c ON b.customer_UUID = c.customerUUID
WHERE c.garcom_UUID = '$garbcom'
AND c.city_UUID = '$cit' ORDER BY `report_date`";

这是 phpmyadmin 中的一个表的图像 http://prntscr.com/1airfd

最佳答案

我在查看用例时遇到了一种更快的方法。

Sweet & Short - 将所有字符串字段(UUID)转换为整数(可以通过使用 SHA 哈希函数计算唯一键来索引(我们将讨论冲突,但那是另一次了)这是执行此操作的简单方法(参数取决于您个人的独特性(子字段或其一部分)

select distinct(CONV(SUBSTRING(CAST(SHA(Concat(text_field_1,text_field_2)) AS CHAR), 1, 16), 16, 10))
from table_name

#Post this you will get integer mappings(which can be readily indexed) like -:
"14686325187172356814"
"4176431494776658251"
"17905162221625924418"
"17418684985242853706"
"2795298138913147719"
"17371106411384154394" .. more

当然,另一种方式(即苦差事)是创建这些独特组合的下拉列表 - 然后在这些存储桶中建立索引 - 这就是 SHA 真正所做的 - 分配存储桶)

正如您所注意到的,我实际上是通过合并两列 text_field_1 &text_field_2 来创建一个唯一的(主)键。您可以采用子字符串或任何最适合您的数据类型和范围的内容。这里详细解释一下这里的数字,16,1,16,10以及如何设计这个SHA函数—— http://greenash.net.au/thoughts/2010/03/generating-unique-integer-ids-from-strings-in-mysql/

关于php - mysql UUID as String 如何加快查询速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17158780/

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